当以这种方式使用重新查找时:

(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/

10-10 01:04