stringr(R)中出现意外的正则表达式结果

时间:2016-10-17 23:39:44

标签: r regex string-matching stringr

请问有人请向我解释一下,为什么str_detect(来自stringr包,版本1.1.0)对于以下三个代码中的每一个都返回TRUE,这与我的期望相反?

str_detect("01", "^[0]*[1-9]*[0]+")
str_detect("01", "^0*[1-9]*0+")
str_detect("01", "^0*[1-9]*0")

我想在开头查找任意零,然后在字符串中查找至少1个非零数字,然后查找零。

显然" 01" string不能限定,因为它在1之后没有0。

我错过了什么吗?我正在寻找的模式是错误的吗?

感谢您的时间!

2 个答案:

答案 0 :(得分:2)

由于前导0在您的模式中是可选的,因此它们将被忽略,并且尾随零将检测到字符串中的0 ...

使用$指定字符串的结尾:

str_detect("01", "^[0]*[1-9]*[0]+$")
str_detect("01", "^0*[1-9]*0+$")
str_detect("01", "^0*[1-9]*0$")

答案 1 :(得分:0)

我相信你想要以下模式:

^0[1-9]+0

有关完整模式说明,请参阅https://regex101.com/r/v9cwHJ/1 您的特定错误是使用*作为前0,它也匹配任何一个 也可以使用+作为第二个数字,以找到至少1个。