gpt4 book ai didi

regex - 将集合转换为 clojure 中的正则表达式模式

转载 作者:行者123 更新时间:2023-12-05 00:56:21 24 4
gpt4 key购买 nike

如果我有这一套

(def my-set #{"foo.clj" "bar.clj" "baz.clj"})

我怎样才能把它变成这个模式字符串:
"foo\.clj|bar\.clj|baz\.clj"

我的尝试:
(defn set->pattern-str [coll] 
(-> (clojure.string/join "|" coll)
(clojure.string/replace #"\." "\\\\.")))

(set->pattern-str my-set)
=> "foo\\.clj|baz\\.clj|bar\\.clj" ;I get the double backslash

更好的想法?

最佳答案

如果您的字符串集可能有其他元字符而不仅仅是 .其中,更通用的方法是ask the underlying java.util.regex.Pattern implementation to escape everything for us :

(import 'java.util.regex.Pattern)

(defn set->pattern-str [coll]
(->> coll
(map #(Pattern/quote %))
(clojure.string/join \|)
re-pattern))

IDEone link here .请记住,IDEone 不是 REPL,您必须告诉它将值放在 stdout 上,例如 println在你看到它们之前。

关于regex - 将集合转换为 clojure 中的正则表达式模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36347140/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com