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

7. Обратные ссылки: одинаковые символы

Паттерн (.)\1 — два одинаковых символа подряд.

  • (.) — захватывает любой символ в группу 1
  • \1 — ссылка на то, что захвачено в группе 1

s = "AABBCCXYZDD"
re.findall(r'(.)\1', s)  # ['A', 'B', 'C', 'D'] — сами символы

Три и более одинаковых:

re.findall(r'(.)\1+', s)      # 2+ одинаковых
re.findall(r'(.)\1{2}', s)    # ровно 3 одинаковых
re.findall(r'(.)\1{2,}', s)   # 3+ одинаковых

Получить всю цепочку:

s = "AAABBBCCCC"
for m in re.finditer(r'(.)\1+', s):
    print(m.group(), len(m.group()))
# AAA 3
# BBB 3  
# CCCC 4
Печать