If you use capturing parenthesis in the regular expression pattern in Python's `re.split()` function, it will include the matching groups in the result ([Python's documentation](http://docs.python.org/library/re.html#re.split)). I need this in my Clojure code and I didn't find an implementation of this, nor a Java method for achieving the same result. Anyway, here is my code: (defn re-tokenize [re text] (let [matcher (re-matcher re text)] (defn inner [last-index result] (if (.find matcher) (let [start-index (.start matcher) end-index (.end matcher) match (.group matcher) insert (subs text last-index start-index)] (if (string/blank? insert) (recur end-index (conj result match)) (recur end-index (conj result insert match)))) (conj result (subs text last-index)))) (inner 0 []))) Example: (re-tokenize #"(\W+)" "...words, words...") => ["..." "words" ", " "words" "..." ""] How could I make this simpler and / or more efficient (maybe also more Clojure-ish)? Thanks!