Regex 为什么我不能在”处拆分|&引用;在clojure
我试图在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 "
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"]