为什么 re-find 返回一个包含两个元素的向量?
why is re-find returning a vector with two elements?
这样使用re-find时:
(re-find #"(\d{3})" "abc1245")
我得到:
["124" "124"]
当我期望只有一个值时。怎么回事?
这是因为括号创建了一个正则表达式 "group"。参见
举个例子。区别如下:
(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 给了你结果和 "group result"。 #2 只为您提供匹配的子字符串。
#3 给出了所有匹配项的顺序。由于只有 4 位数字,剩余的“5”不足以匹配 3 位数字。
#4 总共给出 8 个数字,所以我们得到 "123"
和 "456"
作为匹配项,剩下 7 和 8,因为我们只需要三位数。
正则表达式中的圆括号 (\d{3})
定义一个捕获组,因此 re-find
returns 整个匹配和所有匹配组。
根据 re-find doc:
Returns the next regex match, if any, of string to pattern, using
java.util.regex.Matcher.find(). Uses re-groups to return the groups.
如果您删除括号 - 您将只得到一个符合您预期的匹配项:
=> (re-find #"\d{3}" "abc1245")
=> "124"
=> (re-find #"(\d{3})" "abc1245")
=> ["124" "124"]
你可以在这个online repl.
中自行查看
这样使用re-find时:
(re-find #"(\d{3})" "abc1245")
我得到:
["124" "124"]
当我期望只有一个值时。怎么回事?
这是因为括号创建了一个正则表达式 "group"。参见
举个例子。区别如下:
(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 给了你结果和 "group result"。 #2 只为您提供匹配的子字符串。
#3 给出了所有匹配项的顺序。由于只有 4 位数字,剩余的“5”不足以匹配 3 位数字。
#4 总共给出 8 个数字,所以我们得到 "123"
和 "456"
作为匹配项,剩下 7 和 8,因为我们只需要三位数。
正则表达式中的圆括号 (\d{3})
定义一个捕获组,因此 re-find
returns 整个匹配和所有匹配组。
根据 re-find doc:
Returns the next regex match, if any, of string to pattern, using java.util.regex.Matcher.find(). Uses re-groups to return the groups.
如果您删除括号 - 您将只得到一个符合您预期的匹配项:
=> (re-find #"\d{3}" "abc1245")
=> "124"
=> (re-find #"(\d{3})" "abc1245")
=> ["124" "124"]
你可以在这个online repl.
中自行查看