Проблема
По умолчанию findall не находит пересекающиеся совпадения:
s = "AAAA"
re.findall(r'AA', s) # ['AA', 'AA'] — только 2, хотя пересечений 3
# Позиции:
# AA__ (0-1)
# _AA_ (1-2) — пересекается с предыдущим, НЕ НАЙДЕНО
# __AA (2-3)
Решение через позитивный просмотр вперёд