2017-01-13 9 views

ответ

2

я найти регулярное выражение, чтобы быть простой вариант:

user> (re-seq #"[^=]+|=" "asd=dfg=hgf=jjj") 
;;=> ("asd" "=" "dfg" "=" "hgf" "=" "jjj") 

user> (re-seq #"[^=]+|=" "asd=dfg=hgf=") 
;;=> ("asd" "=" "dfg" "=" "hgf" "=") 

user> (re-seq #"[^=]+|=" "=dfg=hgf=dffff") 
;;=> ("=" "dfg" "=" "hgf" "=" "dffff") 
0

Не то, что я знаю, но вы можете сделать, что с помощью interpose:

user=> (def mystring "a=b=cde=fg=hij") 
#'user/mystring 
user=> (interpose "=" (clojure.string/split mystring #"=")) 
("a" "=" "b" "=" "cde" "=" "fg" "=" "hij") 
0

split-with делает, хотя это потребует немного усилий с вашей стороны.

(split-with #(not= \= %) "a=b") 

Урожайность

[(\a) (\= \b)] 

Самое идиоматическое, что я мог придумать, чтобы исправить это было:

(->> "a=b=c=d" ; Thread the string through the last argument of... 
    (split-with #(not= \= %)) ; Splitting on = 
    (flatten) ; Then flattening 
    (map str)) ; And turning the characters into string 

("a" "=" "b" "=" "c" "=" "d") 

Это, вероятно, не будет производительным из flatten, так что это не будет практичным, если это постоянно называют на длинных списках.