Понимание того, как еще работает путь в условном регулярном выражении Python - PullRequest
0 голосов
/ 26 сентября 2018

Я пытался понять простое регулярное выражение: ([+]{1})(?(1)\d{3}|\d{2}).

Мое (очень, вероятно, неправильное) понимание приведенного выше регулярного выражения: если есть один «+», то за ним следует сразу три цифры, в противном случае (если нет плюса) следует искать двецифры.

Мои два тестовых предложения:

1: "This is a +333 test." 
2: "This is a 22 test."

См .: https://regex101.com/r/oJepMi/1/

Регулярное выражение находит в 1: "+333", но не находит "22 "в предложении 2:.

https://docs.python.org/3/library/re.html упоминает:

(? (Id / name) yes-pattern | no-pattern):" Постараюсьсовпадать с шаблоном «да», если группа с указанным идентификатором или именем существует, и с шаблоном «без шаблона», если его нет. "

Это кажется довольно простым делом, но я изо всех сил пытаюсь понять.

Может кто-нибудь объяснить, как работает концепция else path для python?

С наилучшими пожеланиями и большое спасибо Giovanni

1 Ответ

0 голосов
/ 26 сентября 2018

Использование такого рода условных выражений имеет смысл только в том случае, если группа является необязательной или является частью чередования, поэтому на самом деле можно не сопоставлять ее.

Измените свое регулярное выражение на ([+]{1})?(?(1)\d{3}|\d{2}), чтобы получить эторабота.

Обратите внимание, что это все равно будет соответствовать 22 из +22.Вы должны добавить отрицательный прогноз для проверки на +, если он не предназначен, например, ([+]{1})?(?(1)\d{3}|(?<!)\d{2}) или проще \+\d{3}|(?<!\+)\d{2}

...