You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Clojure中无法用"|"分割字符串?原因及解决方法

问题原因与解决办法

为什么会得到逐个字符的分割结果?

这是因为你用的正则表达式#"|"里的|是正则中的特殊元字符,它代表“交替(alternation)”操作,简单说就是“或”的意思。当你写#"|"时,正则引擎会把它解析成“匹配空字符串或者空字符串”,这就相当于在字符串的每一个字符之间(包括开头和结尾)都进行分割,所以最终会把每个字符(包括|本身)都拆成单独的数组元素。

比如运行:

(clojure.string/split "Hello|World" #"|")

实际得到的是:

["H" "e" "l" "l" "o" "|" "W" "o" "r" "l" "d"]

和你描述的异常结果一致。

如何得到正确的结果?

如果你想要把字符串按|分割成["Hello" "World"],需要把正则中的|转义成普通字符,因为它默认是特殊元字符。有两种常用方式:

  • 使用反斜杠转义:在正则里用\|表示普通的竖线字符,注意在Clojure的字符串里,反斜杠需要额外转义一次,所以写成#"\|":

    (clojure.string/split "Hello|World" #"\|")
    ;; 返回 ["Hello" "World"]
    
  • 使用字符类[]:把|放在字符类里,它就会被当作普通字符处理,写法更简洁:

    (clojure.string/split "Hello|World" #[|])
    ;; 同样返回 ["Hello" "World"]
    

如果你确实想要得到["Hello World"](单个元素,把|替换成空格),那其实不需要用split,而是用clojure.string/replace来替换字符:

[(clojure.string/replace "Hello|World" #"[|]" " ")]
;; 返回 ["Hello World"]

内容的提问来源于stack exchange,提问作者Emma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:38:43