вопросы о регулярных выражениях Python - PullRequest
0 голосов
/ 11 января 2019

Почему следующая строка шаблона приводит к совпадению «кота», а не «шляпы», так как совпадение по умолчанию жадное?

>>> m = re.match(r'(\w+) (\w+)', "A cat jumpped over a hat")
>>> m
<_sre.SRE_Match object; span=(0, 5), match='A cat'>

Может ли кто-нибудь пролить на них свет?

Ответы [ 3 ]

0 голосов
/ 11 января 2019

С официальный документ :

Если ноль или более символов в начале строки соответствуют шаблону регулярного выражения, вернуть соответствующий объект соответствия. Вернуть None, если строка не соответствует шаблону; обратите внимание, что это отличается от совпадения нулевой длины.

0 голосов
/ 11 января 2019

Как уже упоминали другие, re.match начинается с начала строки для сопоставления и проверяет только то, что необходимо. Обратите внимание: match='A cat' в конце строкового представления объекта обозначает то, что было найдено: r'(\w+) (\w+)' из "A cat jumpped over a hat".

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

>>> re.match(r'(\w+) (\w+)', "A cat jumpped over a hat")
<_sre.SRE_Match object; span=(0, 5), match='A cat'>
>>> re.match(r'(\w+) (\w+)$', "A cat jumpped over a hat")
>>> re.match(r'(\w+) (\w+)$', "A cat")
<_sre.SRE_Match object; span=(0, 5), match='A cat'>
0 голосов
/ 11 января 2019

Из официальной документации Python по регулярным выражениям

re.match() проверяет совпадение только в начале строки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...