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

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

Поиск максимальной подстроки, состоящей из одного символа C



Поиск всех подстрок, состоящих из одно и того же символа



регулярное выражение (.)\1* работает так:

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

  • \1* — это ссылка назад (бэкраференс), означающая повторение того же символа, который был захвачен первой группой, ноль или более раз (символ *).

Таким образом, выражение находит последовательности одинаковых символов подряд: например, "aaa""bb""c".

re.findall с таким шаблоном вернёт список первых символов каждой подряд идущей серии, а re.finditer даёт доступ к каждому полному совпадению (все повторения подряд) с их длиной — поэтому в цикле print(m.group(), len(m.group())) выводятся сами цепочки и их длина.


Поиск паттернов/комбинаций



Пояснение:

  • Шаблон (AB)+ означает одну или более повторений группы AB.

  • m.group() или m.group(0) — всё совпадение целиком, например 'ABABABAB' длиной 8 символов.

  • m.group(1) — текущий текст, который соответствует первой группе (AB), то есть одиночное вхождение "AB".

  • Так как в группе (AB) не повторяются символы, а повторяется вся группа, m.group(1) вернёт строку "AB".

Соответственно, вызов len(m.group(1)) выведет длину этой группы, то есть 2 (длина AB), а не длину всего совпадения (8 символов).

Если нужно длину всего совпадения, используйте len(m.group()) или len(m.group(0)).

Печать