当以这种方式使用重新查找时:
(re-find #"(\d{3})" "abc1245")
我得到:
["124" "124"]
当我期望只有一个价值时。这是怎么回事?
最佳答案
这是因为括号会创建一个正则表达式“组”。看到
https://clojuredocs.org/clojure.core/re-find
举些例子。区别在于:
(re-find #"(\d{3})" "abc1245") => ["124" "124"] ; #1
(re-find #"\d{3}" "abc1245") => "124" ; #2
(re-seq #"\d{3}" "abc1245") => ("124") ; #3
(re-seq #"\d{3}" "abc12345678") => ("123" "456") ; #4
因此,#1同时为您提供结果和“分组结果”。 #2仅给您匹配的子字符串。
#3为您提供所有匹配项的序列。由于只有4位数字,因此剩余的“ 5”不足以匹配3位数字。
#4总共提供8位数字,因此我们得到
"123"
和"456"
作为匹配项,剩下7和8,因为我们只想要三位数。关于clojure - 为什么重新查找返回具有两个元素的向量?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48651244/