我的问题是关于功能clojure.string/split
。可以指定函数的最大拆分数,它就像一个魅力:
user> (clojure.string/split "1{1,2{3,4},5}6" #"\{" 2)
;; => ["1" "1,2{3,4},5}6"]
但是,该函数从左到右遍历字符串。有时我希望它从右到左遍历一个字符串形式(从结尾):
user> (clojure.string/split "1{1,2{3,4},5}6" #"\}" 2)
;; => ["1{1,2{3,4" ",5}6"]
;; desired result: ["1{1,2{3,4},5" "6"]
如何使用正则表达式实现它?
答案 0 :(得分:1)
您可以尝试在特定情况下使用否定前瞻,以确保在您分割的那个之后不再有}
:
user> (clojure.string/split "1{1,2{3,4},5}6" #"\}(?![^\}]*\})" 2)
(?![^\}]*\})
是一个负面预测,如果}
匹配后有另一个}
,则会阻止匹配。我使用被否定的类[^\}]*
比使用像.*
这样的东西更快,我不完全确定你是否需要逃脱,因为我不熟悉clojure。通常,您可以安全地使用\}(?![^}]*\})
,但无论是否需要,转义都可以使用。