Clojure Style String Conversion (def example-str "anExampleSTRINGthatCanBeConverted") (defn conversion-handler [x] (let [r clojure.string/replace] (-> x (r #"[a-z]{1}[A-Z]{1}" (fn [x] (let [[x y] x] (str x "-" y)))) (r #"[A-Z]{2}[a-z]{1}" (fn [x] (let [[x y z] x] (str x y "-" z)))) (r #"^[A-Z]+-" (fn [x] (let [body (butlast x)] (str (reduce str (butlast body)) "-" (last body))))) (r #"_" "-") clojure.string/lower-case))) example.core> (conversion-handler example-str) "an-example-string-that-can-be-converted" example.core> (conversion-handler "MMARecord") "mma-record"