Имеет ли Clojure функцию Split, которая разбивает String на подстроки, включая разделитель? Как «= Ь», разделитель «=» возврата:. «А», «=», «б» благодаряClojure - Split String без потери разделителя
0
A
ответ
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
, так что это не будет практичным, если это постоянно называют на длинных списках.