Неожиданный результат регулярного выражения в stringr (R)

Кто-нибудь, объясните мне, почему 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» не может быть квалифицирована, так как в ней нет 0 после 1.

Я что-то упускаю? Является ли шаблон неправильным для того, что я ищу?

Спасибо за ваше время!


person Szolnoki Endre    schedule 17.10.2016    source источник


Ответы (2)


Я считаю, что вам нужен следующий шаблон:

^0[1-9]+0

Полное описание шаблона см. на странице https://regex101.com/r/v9cwHJ/1.
Ваша конкретная ошибка заключалась в использовании * для первого 0, он также не соответствует ни одному.
Также используйте + для второй цифры, чтобы найти хотя бы 1.

person Dror    schedule 17.10.2016

Поскольку начальный 0 является необязательным в ваших шаблонах, они игнорируются, а конечные нули обнаруживают 0 в строке...

Используйте $, чтобы указать конец строки:

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