从末尾用正则表达式拆分字符串

时间:2014-09-10 12:12:37

标签: regex string clojure

我的问题是关于功能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"]

如何使用正则表达式实现它?

1 个答案:

答案 0 :(得分:1)

您可以尝试在特定情况下使用否定前瞻,以确保在您分割的那个之后不再有}

user> (clojure.string/split "1{1,2{3,4},5}6" #"\}(?![^\}]*\})" 2)

(?![^\}]*\})是一个负面预测,如果}匹配后有另一个},则会阻止匹配。我使用被否定的类[^\}]*比使用像.*这样的东西更快,我不完全确定你是否需要逃脱,因为我不熟悉clojure。通常,您可以安全地使用\}(?![^}]*\}),但无论是否需要,转义都可以使用。