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

Вопрос 24. Поиск в тексте регулярными выражениями. Типовые паттерны. Часть 4 (квантификаторы)

Группы с условиями



Пояснение 

s = "AAXBBXCCXAAX" # Два одинаковых символа подряд
re.findall(r'(.)\1', s) # ['A', 'B', 'C', 'A']
  • (.) — захватывает любой символ (первая группа).

  • \1 — ссылка на первый захваченный символ.

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

  • В вашем примере найдёт пары AA, BB, CC, AA, вернёт список символов, которые повторились — ['A', 'B', 'C', 'A'].

re.findall(r'(.)\1+', s) # ['A', 'B', 'C', 'A']
  • (.)\1+ ищет цепочки из двух и более повторяющихся одинаковых символов.

  • По смыслу совпадает с предыдущим, но требует двух и более повторений.

  • Результат такой же, так как в примере подряд максимум две и более.  

re.findall(r'(.)\1{2}', s) # поиск троек подряд одного символа
  • (.)\1{2} означает: первый захваченный символ, за которым следуют ровно 2 таких же подряд.

  • Ищет трёхкратные повторения символа подряд (например, AAA).

  • В вашей строке такой последовательности нет, поэтому результат может быть пустым.

re.findall(r'(.)(.)\w\2\1', s)
  • Шаблон ищет палиндром длины 5, где:

    • (.) — первая группа (символ 1),

    • (.) — вторая группа (символ 2),

    • \w — любой символ (символ 3),

    • \2 — повтор второго символа,

    • \1 — повтор первого символа.

  • Например, если строка содержит "ABCBA", этот шаблон найдёт её.

  • Возвращает список всех вхождений таких палиндромов, возвращая группы 1 и 2 (первый и второй символ).


Сравнение квантификаторов

Шаблон Что ищет Пример совпадения
(.)\1 2 одинаковых AABB
(.)\1{2} 3 одинаковых AAABBB
(.)\1{3} 4 одинаковых AAAABBBB
(.)\1+ 2+ одинаковых AAAAAAAAA...
Печать