Я пытаюсь использовать квантор ?
, чтобы соответствовать шаблону, только если он существует, но я не могу заставить его работать так, как я хочу. В приведенном ниже примере я пытаюсь извлечь пару цифр после AZA
и ZZZ
, где ZZZ
появляется все время, но AZA
не является обязательным. Когда AZA
отсутствует, я просто хочу, чтобы вернуть ('', [zzz-value])
пара (пустую строку вместо значения AZA
):Необязательный шаблон регулярных выражений
Вход:
AZA:00zx---
ZZZ:32fd---
testxfiler
gsdkfklsd
fdsfsk
AZA:06x---
ZZZ:50----
gsdkfklsd
gsdkfklsd
fdsfsk
fdsfsk
gsdkfklsd
fdsfsk
ZZZ:32zzz----
fdsfsk
fdsfsk
gsdkfklsd
fdsfsk
AZA:46----
ZZZ:53---
Желаемый результат:
[(00,32), (06, 50), ('',32), (46,53)]
Моя попытка:
re.findall('(?:AZA:([0-9]*))?.*?ZZZ:([0-9]*)', text, re.DOTALL)
Мой выход:
[('00', '32'), ('', '50'), ('', '32'), ('', '53')
Спасибо, это сработало. Не могли бы вы объяснить мне кратко, почему это работает, а у меня нет? – confused00
@ confused00 и т. Д. То же самое, что размещение '?' Отличается .Yur'. *? 'Перед' ZZZ' будет потреблять часть 'AZA' также, поскольку' AZA' является необязательным. Вот почему вы получаете '\ d +' 'ZZZ', а не' AZA'. Посмотрите http://regex101.com/r/bB8jY7/6 – vks
Я вижу, спасибо – confused00