#python #regex #findall
Вопрос:
Я решаю проблему сопоставления с регулярными выражениями в python и использую код, аналогичный следующему:
match = re.findall(r'a(.*)', 'xayaz')
Я бы ожидал выхода match = [ 'yaz', 'z']
, но вместо этого фактический результат таков match = ['yaz']
.
Точно так же я ожидал re.findall(r'.*a(.*), 'xayaz')
бы вернуть те же 2 матча, но вместо этого мы получаем ['z']
.
Итак, мой вопрос в том, почему в каждом из этих регулярных выражений отсутствует одно совпадение, которое я ожидал бы увидеть? Или я неправильно понимаю метод findall?
(первый вопрос, приношу извинения за любые ошибки и спасибо за любую помощь!)
Комментарии:
1. Как только регулярное выражение использует «yaz», сопоставлять больше нечего
Ответ №1:
Используйте указатель, чтобы не «потреблять» какое-либо совпадение, чтобы получить совпадения, перекрывающиеся
re.findall(r'(?=a(.*))', 'xayaz')