5. 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

time 1000 ms
memory 256 Mb

Комментарий учителя