Regex 为什么我不能在”处拆分|&引用;在clojure

Regex 为什么我不能在”处拆分|&引用;在clojure,regex,clojure,Regex,Clojure,我试图在clojure中拆分字符串“Hello | World”,但是当使用拆分方法“(clojure.string/split x#“|”)“我得到了一个奇怪的结果,我得到了这个”[he l o | w o r l d]”。有谁能告诉我它为什么会这样做,以及我如何将其拆分以获得[你好世界]?以下是答案: (str/split "Hello|World" #"|") => ["H" "e" "l" "l" "o" "|" "W" "o" "r" "l" "d"] (str/split "

我试图在clojure中拆分字符串“
Hello | World
”,但是当使用拆分方法“
(clojure.string/split x#“|”)
“我得到了一个奇怪的结果,我得到了这个
”[he l o | w o r l d]”
。有谁能告诉我它为什么会这样做,以及我如何将其拆分以获得
[你好世界]

以下是答案:

(str/split "Hello|World" #"|")  => ["H" "e" "l" "l" "o" "|" "W" "o" "r" "l" "d"]
(str/split "Hello World" #" ")  => ["Hello" "World"]
(str/split "Hello|World" #"\|") => ["Hello" "World"]
在正则表达式中,
\
字符是特殊的,需要使用反斜杠
\
进行转义

|
字符是正则表达式中的逻辑运算符,通常用于表示“or”,如“abc|def”:

因为你没有其他东西在场,它似乎被解释为“任何东西”,所以它匹配了每个角色之间的边界


更多信息。

使用
(clojure.string/split“Hello | World”(re-pattern(.java.util.regex.pattern quote“|”)
其中1)调用
模式。quote
从字符串“|”创建模式,然后2)使用
re-pattern
从带引号的字符串创建正则表达式,然后将其作为第二个参数传递给
clojure.string/split
,然后生成所需的结果
[“Hello”“World”]
。如果您想让它更漂亮一点,请使用
(defn重新引用模式[s](重新引用模式(.java.util.regex.pattern quote s))
,然后您的代码就会变成
(clojure.string/split“Hello | World”(重新引用模式“|”)
@WiktorStribiżew-如果你能取消对这一问题的投票,我可以将上面的评论作为回答。您可能是对的,从Java的角度来看,这个问题是一个dup,但是这个问题没有被标记,从Clojure的角度来看,没有人解决过如何调用
模式的问题;因此,我相信你的接近重复应该撤销。谢谢。这是一个标有
regex
的问题。
|
符号是一个众所周知的字符,如果要将is视为文字字符,则需要转义。不需要重新开放。
(str/split "Hello|World" #"e|o") => ["H" "ll" "|W" "rld"]