Статья Автор: Деникина Н.В., Деникин А.В.

12. Пересекающиеся паттерны (lookahead)

По умолчанию findall не находит пересекающиеся совпадения:

s = "AAAA"
re.findall(r'AA', s)  # ['AA', 'AA'] — только 2, не 3

Позитивный просмотр вперёд (?=...) — проверяет, но не потребляет символы:

s = "AAAA"
re.findall(r'(?=(AA))', s)  # ['AA', 'AA', 'AA'] — 3 пересечения

Как это работает:

  • (?=AA) — "здесь впереди есть AA" (не двигает указатель)
  • (AA) внутри — захватывает это AA
Печать