Регулярное выражение отсутствуют совпадения?

#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')