意外的正则表达式导致 stringr (R)

Unexpected regular expression result in stringr (R)

有人能给我解释一下吗,为什么 str_detect(来自 stringr 包,版本 1.1.0)return 对于以下三个代码中的每一个都为 TRUE,这与我的预期相反?

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

我想在字符串的开头查找任何零,后跟至少 1 个非零数字,然后是零。

显然“01”字符串不符合条件,因为它在 1 之后没有 0。

我错过了什么吗?我要查找的模式是否错误?

感谢您的宝贵时间!

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

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

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

我相信你想要以下模式:

^0[1-9]+0

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