Hi Chris, just noticed this post. I wanted re-split to behave like Perl/Ruby's split, although the dot-method syntax makes it redundant with (.split string "regex").
String.split(...) takes a String argument as the regex, not a Pattern; not sure if there's a performance penalty from recompiling the regex. But sure, add yours in too. Maybe call it re-partition, since it's a bit like Rich's partition-by (in clojure.contrib.seq-utils). -Stuart On Sep 8, 11:59 pm, Chouser <[EMAIL PROTECTED]> wrote: > I'd written a re-split before discovering Stuart's in > clojure.contrib.str-utils. Mine's a little different in that it's > lazy and the seq it returns includes the parts that match the pattern > as well as the parts in between: > > user=> (my-re-split #"[0-9]+" "abc123def456") > ("abc" "123" "def" "456") > user=> (re-split #"[0-9]+" "abc123def456") > ("abc" "def") > > It's easy to use seq functions or destructuring to pick out the pieces you > want: > > user=> (take-nth 2 (my-re-split #"[0-9]+" "abc123def456")) > ("abc" "def") > > That's just like re-split from str-utils. Or you can get just the separators: > > user=> (take-nth 2 (rest (my-re-split #"[0-9]+" "abc123def456"))) > ("123" "456") > > Or both: > > user=> (for [[othr num] (partition 2 (my-re-split #"[0-9]+" > "abc123def456"))] {:othr othr :num num}) > ({:num "123", :othr "abc"} {:num "456", :othr "def"}) > > So, should I add my-re-split to str-utils? If so, is it similar > enough to re-split to replace the existing one? Otherwise, what would > be a good name for it? > > Here's the implementation: > > (defn re-split > [#^java.util.regex.Pattern re #^CharSequence cs] > (let [m (re-matcher re cs)] > ((fn step [prevend] > (if (.find m) > (lazy-cons (.subSequence cs prevend (.start m)) > (lazy-cons (re-groups m) > (step (+ (.start m) (count (.group m)))))) > (when (< prevend (.length cs)) > (list (.subSequence cs prevend (.length cs)))))) > 0))) > > --Chouser --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/clojure?hl=en -~----------~----~----~----~------~----~------~--~---