1.3.0 permalink Arrow_down_16x16
  • (split s re)
  • (split s re limit)
Splits string on a regular expression. Optional argument limit is
the maximum number of splits. Not lazy. Returns vector of the splits.

6 Examples top

  • user=> (require '[clojure.string :as str])
    
    user=> (str/split "Clojure is awesome!" #" ")
    ["Clojure" "is" "awesome!"]
    
    user=> (str/split "q1w2e3r4t5y6u7i8o9p0" #"\d+")
    ["q" "w" "e" "r" "t" "y" "u" "i" "o" "p"]
    user=> (str/split "q1w2e3r4t5y6u7i8o9p0" #"\d+" 5)
    ["q" "w" "e" "r" "t5y6u7i8o9p0"]
    
  • ;; Splits a string on space character and joins 
    ;; the resulting collection with a line feed character
    
    (use '[clojure.string :only (join split)])
    
    user=> (println
             (join "\n"
               (split "The Quick Brown Fox" #"\s")))
    The
    Quick
    Brown
    Fox
    nil
  • (use '[clojure.string :only (split triml)])
    
    ;; Splitting on whitespace is a common desire.
    user=> (split "Some words to split" #"\s+")
    ["Some" "words" "to" "split"]
    
    ;; By using the pattern #"\s+", we split on all occurrences of one or
    ;; more consecutive whitespace characters.
    user=> (split "Some    words   with\tother whitespace      \n" #"\s+")
    ["Some" "words" "with" "other" "whitespace"]
    
    ;; If you are used to Perl's special behavior of split(' ', $str),
    ;; where it ignores leading whitespace in the string to be split, this
    ;; does not quite do it.
    user=> (split "   Leading whitespace causes empty first string" #"\s+")
    ["" "Leading" "whitespace" "causes" "empty" "first" "string"]
    
    ;; This will do it.
    user=> (defn perl-split-on-space [s]
             (split (triml s) #"\s+"))
    #'user/perl-split-on-space
    user=> (perl-split-on-space "   This is often what you want   ")
    ["This" "is" "often" "what" "you" "want"]
    
    ;; There might be cases where you want this instead.
    user=> (split "Some    words   with\tother whitespace      \n" #"\s")
    ["Some" "" "" "" "words" "" "" "with" "other" "whitespace"]
    
  • (use '[clojure.string :only (split)])
    
    ;; Split on every occurrence of : character
    user=> (split "root:*:0:0:admin:/var/root:/bin/sh" #":")
    ["root" "*" "0" "0" "admin" "/var/root" "/bin/sh"]
    
    ;; Empty strings are returned when two colons appear consecutively in
    ;; the string to be split.
    user=> (split "root::0:0::/var/root:/bin/sh" #":")
    ["root" "" "0" "0" "" "/var/root" "/bin/sh"]
    
    ;; Without specifying a limit, any empty strings at the end are
    ;; omitted.
    user=> (split "root::0:0:admin:/var/root:" #":")
    ["root" "" "0" "0" "admin" "/var/root"]
    user=> (split "root::0:0:admin::" #":")
    ["root" "" "0" "0" "admin"]
    
    ;; If you want all of the fields, even trailing empty ones, use a
    ;; negative limit.
    user=> (split "root::0:0:admin:/var/root:" #":" -1)
    ["root" "" "0" "0" "admin" "/var/root" ""]
    user=> (split "root::0:0:admin::" #":" -1)
    ["root" "" "0" "0" "admin" "" ""]
    
    ;; Use a positive limit of n to limit the maximum number of strings in
    ;; the return value to n.  If it returns exactly n strings, the last
    ;; contains everything left over after splitting off the n-1 earlier
    ;; strings.
    user=> (split "root::0:0:admin:/var/root:" #":" 2)
    ["root" ":0:0:admin:/var/root:"]
    user=> (split "root::0:0:admin:/var/root:" #":" 3)
    ["root" "" "0:0:admin:/var/root:"]
    user=> (split "root::0:0:admin:/var/root:" #":" 4)
    ["root" "" "0" "0:admin:/var/root:"]
    user=> (split "root::0:0:admin:/var/root:" #":" 15)
    ["root" "" "0" "0" "admin" "/var/root" ""]
    
  • (:require [clojure.string :as cstr])
    
    (def legal-ref "1321-61")
    
    (cstr/split legal-ref #"-")
    ["1321" "61"]
  • ;; Note: See clojure.core/subs for discussion of behavior of substrings
    ;; holding onto references of the original strings, which can
    ;; significantly affect your memory usage in some cases.
Log in to add / edit an example.

See Also top

Log in to add a see also.

Plus_12x12 Minus_12x12 Source clojure/string.clj:169 top

(defn split
  "Splits string on a regular expression.  Optional argument limit is
  the maximum number of splits. Not lazy. Returns vector of the splits."
  {:added "1.2"}
  ([^CharSequence s ^Pattern re]
     (LazilyPersistentVector/createOwning (.split re s)))
  ([ ^CharSequence s ^Pattern re limit]
     (LazilyPersistentVector/createOwning (.split re s limit))))
Vars in clojure.string/split:
Used in 0 other vars

Comments top

No comments for split. Log in to add a comment.