2. Основные функции модуля re в Python. Часть 2


Итератор совпадений

re.finditer(pattern, string, flags=0)
  • pattern — шаблон регулярного выражения.​

  • string — строка для поиска.​

  • flags — необязательные флаги (например, re.IGNORECASE).​


Поведение и результат

  • Находит все совпадения слева направо и возвращает итератор Match-объектов, даже если совпадений нет (пустой итератор).​

  • Каждый Match-объект содержит позиции (span()start()end()), текст совпадения (group()) и группы захвата.​

  • Экономит память для больших текстов, так как не создаёт полный список сразу.​


Работа с итератором



Поиск и замена всех совпадений

re.sub(pattern, repl, string, count=0, flags=0)
  • pattern — шаблон регулярного выражения.​

  • repl — строка замены, функция или ссылки на группы (\1\g<name>).​

  • string — исходная строка.​

  • count — максимум замен (0 = все).​

  • flags — флаги поведения (re.IGNORECASE и др.).​


Поведение и результат

  • Заменяет все непересекающиеся совпадения шаблона слева направо и возвращает новую строку.​

  • Если repl — функция, вызывается для каждого Match-объекта и должна вернуть строку замены.​

  • Поддерживает ссылки на группы: \1\g<1>\g<name> для захваченных частей шаблона.​

  • Если совпадений нет, возвращает исходную строку без изменений.​



Разделение строки по непересекающимся совпадениям

re.split(pattern, string, maxsplit=0, flags=0)
  • pattern — шаблон регулярного выражения для разделителей.​

  • string — строка для разделения.​

  • maxsplit=0 — максимум делений (0 = все).​

  • flags — флаги поведения (например, re.IGNORECASE).​


Поведение и результат

  • Разделяет строку по всем вхождениям шаблона, возвращая список частей между ними.​

  • Если в шаблоне есть захватывающие группы (скобки), сами разделители тоже включаются в результат.​

  • При maxsplit > 0 выполняет только указанное количество делений.​

  • Если совпадений нет, возвращает список с исходной строкой.​


Отличие от других функций

  • В отличие от str.split(), использует регулярные выражения для сложных разделителей.​

  • В отличие от re.findall()возвращает разделённые части, а не сами совпадения.​

  • В отличие от re.sub()удаляет разделители, а не заменяет их.​



Когда разделитель находится в конце строки, re.split() возвращает пустую строку как последний элемент списка, отражая отсутствие текста после последнего совпадения.

time 1000 ms
memory 256 Mb

Комментарий учителя