регулярное выражение Python - PullRequest
0 голосов
/ 29 ноября 2018

Ниже мой код.Насколько я понимаю, моя модель говорит, что вы должны встретить машину, и домашнее животное - это опртт. е. проверьте слово «car» и «ковровое покрытие». Теперь все в порядке совпадения с ковровым покрытием. Но вывод re.finall должен быть ['carpet', 'car'], но он показывает мне ['pet', '']Пожалуйста, дайте мне знать, где я не прав?

import re
string = "carpet and car"
pattern = r'car(pet)?'
print(re.search(pattern, string))
print(re.findall(pattern, string))

Вот вывод кода:

<_sre.SRE_Match object; span=(0, 6), match='carpet'>
['pet', '']

Ответы [ 2 ]

0 голосов
/ 29 ноября 2018

Используйте взамен

pattern = r'car(?:pet)?'

.?: делает группу не захватывающей (см. Документацию по синтаксису регулярных выражений ), что делает все различия равными findall, так как возвращает список групп захвата, если таковыеприсутствует в вашем образце:

>>> re.findall(pattern, "carpet and car")
['carpet', 'car']
0 голосов
/ 29 ноября 2018

Причина указана в re документации findall():

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

Если вы хотите получить ожидаемый результат, используйте finditer().

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