s = "AAXBBXCCXAAX" # Два одинаковых символа подряд re.findall(r'(.)\1', s) # ['A', 'B', 'C', 'A']
(.) — захватывает любой символ (первая группа).
(.)
\1 — ссылка на первый захваченный символ.
\1
Вместе (.)\1 ищет два одинаковых символа подряд.
(.)\1
В вашем примере найдёт пары AA, BB, CC, AA, вернёт список символов, которые повторились — ['A', 'B', 'C', 'A'].
re.findall(r'(.)\1+', s) # ['A', 'B', 'C', 'A']
(.)\1+ ищет цепочки из двух и более повторяющихся одинаковых символов.
(.)\1+
По смыслу совпадает с предыдущим, но требует двух и более повторений.
Результат такой же, так как в примере подряд максимум две и более.
re.findall(r'(.)\1{2}', s) # поиск троек подряд одного символа
(.)\1{2} означает: первый захваченный символ, за которым следуют ровно 2 таких же подряд.
(.)\1{2}
Ищет трёхкратные повторения символа подряд (например, AAA).
В вашей строке такой последовательности нет, поэтому результат может быть пустым.
re.findall(r'(.)(.)\w\2\1', s)
Шаблон ищет палиндром длины 5, где:
(.) — первая группа (символ 1),
(.) — вторая группа (символ 2),
\w — любой символ (символ 3),
\w
\2 — повтор второго символа,
\2
\1 — повтор первого символа.
Например, если строка содержит "ABCBA", этот шаблон найдёт её.
Возвращает список всех вхождений таких палиндромов, возвращая группы 1 и 2 (первый и второй символ).
AA
BB
AAA
BBB
(.)\1{3}
AAAA
BBBB
AAAA...