请问有人请向我解释一下,为什么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。
我错过了什么吗?我正在寻找的模式是错误的吗?
感谢您的时间!
答案 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个。