Python Регулярное выражение Почему квантификатор (+) не жадный - PullRequest
0 голосов
/ 05 апреля 2020

Ввод: asjkd http://www.as.com/as/g/ff askl

Ожидаемый вывод: http://www.as.com/as/g/ff

Когда я пытаюсь выполнить приведенное ниже, я получаю ожидаемый результат

pattern=re.compile(r'http[\w./:]+')
print(pattern.search("asjkd http://www.as.com/as/g/ff askl"))

Почему не + квантификатор жадный здесь? Я ожидал, что это будет жадным. Здесь на самом деле отсутствие жадности помогает найти правильный ответ.

1 Ответ

0 голосов
/ 05 апреля 2020

Это жадный. Прекращает сопоставление, когда попадает в пробел, потому что [\w./:] не соответствует пробелу. Пробел не является символом слова (alphanumeri c или подчеркивание), точкой, sla sh или двоеточием.

Измените + на +?, и вы можете посмотрим, что происходит, когда он не жадный.

жадный

>>> pattern=re.compile(r'http[\w./:]+')
>>> print(pattern.search("asjkd http://www.as.com/as/g/ff askl"))
<re.Match object; span=(6, 31), match='http://www.as.com/as/g/ff'>

не жадный

>>> pattern=re.compile(r'http[\w./:]+?')
>>> print(pattern.search("asjkd http://www.as.com/as/g/ff askl"))
<re.Match object; span=(6, 11), match='http:'>

It соответствует одному символу :!

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