
Модуль re встроен в Python и не требует отдельной установки при стандартной конфигурации. Для использования необходимо выполнить импорт через import re, после чего становятся доступны функции для поиска, замены и разбиения строк с использованием регулярных выражений.
Для поиска подстрок применяется функция re.search(), которая возвращает первый найденный объект совпадения, а re.findall() собирает все совпадения в виде списка. При необходимости заменить текст используют re.sub(pattern, repl, string), где pattern – регулярное выражение, repl – строка замены, string – исходная строка.
Регулярные выражения поддерживают точные и диапазонные совпадения: \d соответствует любой цифре, \w – любому символу слова, [a-zA-Z] – буквам в указанном диапазоне. Флаги re.IGNORECASE и re.MULTILINE позволяют учитывать регистр и многострочные строки при поиске.
Рекомендуется компилировать часто используемые выражения через re.compile(). Это повышает производительность при многократном применении одного шаблона и позволяет хранить выражение как объект с методами search(), match(), findall().
Проверка наличия модуля re и его установка в разных версиях Python

import re
Если модуль отсутствует, интерпретатор выдаст ошибку ModuleNotFoundError. В современных сборках Python (3.6 и выше) модуль всегда включён, поэтому установка обычно не требуется.
Для отдельных минимальных сборок или нестандартных дистрибутивов Python можно обновить или переустановить стандартную библиотеку. В Linux это делается через пакетный менеджер, например:
sudo apt install python3-minimal – для Debian/Ubuntu,
sudo dnf install python3 – для Fedora.
На Windows и macOS стандартная библиотека устанавливается вместе с Python. В редких случаях, если модуль повреждён, его восстановление выполняется переустановкой Python через официальный установщик с сайта python.org.
Для виртуальных окружений (venv, virtualenv) модуль re доступен автоматически, так как виртуальное окружение копирует стандартную библиотеку из базовой установки. Проверка выполняется той же командой import re.
Импорт модуля re и настройка базовых параметров поиска

Для работы с регулярными выражениями в Python используется встроенный модуль re. Импорт выполняется стандартным способом: import re.
Основной параметр при поиске текста – это флаг. Модуль поддерживает несколько ключевых флагов: re.IGNORECASE для игнорирования регистра, re.MULTILINE для обработки многострочного текста, re.DOTALL для включения символа новой строки в шаблон ..
Перед выполнением поиска рекомендуется компилировать регулярное выражение с помощью re.compile(pattern, flags). Это повышает производительность при повторных вызовах и позволяет хранить флаговые настройки отдельно от вызова функций поиска.
Для базовой настройки поиска важно определить: шаблон, флаги и метод поиска. Методы модуля: re.match() проверяет совпадение с начала строки, re.search() ищет первое вхождение по всему тексту, re.findall() возвращает все совпадения в виде списка, re.finditer() создаёт итератор объектов Match.
Пример правильной настройки:
pattern = re.compile(r"\d{3}-\d{2}-\d{4}", re.IGNORECASE)
match = pattern.search("Номер: 123-45-6789")
Этот подход отделяет шаблон от текста и флагов, упрощает отладку и обеспечивает повторное использование выражений без дополнительных настроек.
Использование re.match для проверки совпадений в начале строки
Функция re.match проверяет, соответствует ли регулярное выражение только началу строки. Если совпадение найдено, возвращается объект Match, содержащий информацию о позиции и содержимом совпадения. В противном случае возвращается None.
Синтаксис функции:
re.match(pattern, string, flags=0)
| Параметр | Описание |
|---|---|
| pattern | Регулярное выражение для поиска |
| string | Строка, в которой выполняется поиск |
| flags | Флаги модификации поиска (например, re.IGNORECASE, re.MULTILINE) |
Пример проверки, начинается ли строка с цифры:
import re
text = "123abc"
result = re.match(r'\d+', text)
if result: print(result.group())
В этом примере \d+ соответствует последовательности цифр в начале строки. Функция вернёт '123'.
Если нужно проверить совпадение с текстом без учёта регистра, применяют флаг re.IGNORECASE:
pattern = r'hello'
text = 'Hello, world!'
match = re.match(pattern, text, re.IGNORECASE)
print(match.group() if match else 'Совпадений нет')
Для получения позиции совпадения используют методы start() и end():
m = re.match(r'\w+', 'Python3')
Использование re.match рекомендуется, когда важен именно префикс строки. Для поиска совпадений внутри всей строки лучше использовать re.search или re.findall.
Применение re.search для поиска шаблона в любой части текста
Функция re.search проверяет наличие заданного шаблона в любом месте строки, возвращая объект совпадения при первом обнаружении соответствия. В отличие от re.match, она не ограничена началом строки и позволяет искать подстроки внутри текста.
Синтаксис: re.search(pattern, string, flags=0). Параметр pattern задает регулярное выражение, string – текст для анализа, flags – дополнительные настройки (например, re.IGNORECASE для поиска без учета регистра).
Пример: чтобы найти первое вхождение числа в строке, используйте re.search(r'\d+', 'Стоимость: 450 руб.'). Метод group() возвращает совпавшую подстроку: '450'.
Для проверки наличия шаблона без извлечения можно использовать условие if re.search(r'ошибка', log_line):, что удобно при фильтрации строк логов.
Флаги расширяют возможности поиска. re.IGNORECASE игнорирует регистр, re.MULTILINE позволяет применять шаблон к каждой строке многострочного текста, re.DOTALL включает символ перевода строки в ..
Для сложных выражений рекомендуется комбинировать re.search с группами: re.search(r'Имя:\s*(\w+)', text).group(1) извлечет только имя, исключая метку.
Функция возвращает None, если совпадений нет. Это позволяет безопасно использовать проверку через условие без риска выброса исключений.
Использование re.search эффективно при поиске подстрок с неизвестным положением в тексте, быстром извлечении данных и фильтрации контента по регулярным шаблонам.
Разбор re.findall и re.finditer для извлечения всех совпадений
Функция re.findall возвращает список всех непересекающихся совпадений шаблона в строке. Если шаблон содержит группы, результатом будет список кортежей с соответствующими захваченными подстроками. Например:
import re
text = "Цена: 100, скидка: 20"
matches = re.findall(r"\d+", text)
print(matches) # ['100', '20']
Для больших строк или необходимости работать с объектами совпадений удобнее использовать re.finditer. Она возвращает итератор объектов Match, позволяя получать позицию совпадения через match.start() и match.end(). Пример:
matches = re.finditer(r"\d+", text)
for m in matches:
print(m.group(), m.start(), m.end()) # '100' 6 9, '20' 18 20
Если требуется извлечь совпадения с конкретными подгруппами, re.findall возвращает сразу нужные группы, а re.finditer позволяет применять дополнительные методы объекта Match для проверки и замены. Для фильтрации совпадений по условию лучше использовать re.finditer, так как она обрабатывает элементы по одному, снижая нагрузку на память.
Для сложных шаблонов с повторениями и альтернативами рекомендуется использовать re.finditer, чтобы точно контролировать диапазон совпадений и их позиции, а re.findall – когда нужен простой список строк без дополнительных метаданных.
Замена текста с помощью re.sub и re.subn с шаблонами

Модуль re предоставляет функции re.sub и re.subn для замены текста по регулярным выражениям. Они позволяют работать не только с точными совпадениями, но и с комплексными шаблонами, включая группы и классы символов.
Основные параметры функций:
pattern– регулярное выражение, определяющее, что искать;repl– строка или функция для замены найденного текста;string– исходная строка для обработки;count– максимальное количество замен (по умолчанию0– все совпадения);flags– модификаторы, напримерre.IGNORECASEдля игнорирования регистра.
Пример использования re.sub для замены всех цифр на знак #:
import re
text = "Телефон: 123-456-7890"
result = re.sub(r'\d', '#', text)
print(result) # Телефон: ###-###-####
Использование функций для групп позволяет сохранять части текста при замене:
text = "user@example.com"
new_text = re.sub(r'(\w+)@(\w+\.\w+)', r'\1[at]\2', text)
print(new_text) # user[at]example.com
re.subn отличается тем, что возвращает кортеж (результат_замены, количество_замен):
text = "cat dog cat"
result, count = re.subn(r'cat', 'fox', text)
print(result) # fox dog fox
print(count) # 2
Рекомендации по применению:
- Использовать группы
(...)для сохранения частей текста, которые не нужно изменять. - Функцию
replможно задавать как функцию для динамической генерации замены. - При больших текстах и множественных заменах
re.subnудобна для анализа количества изменений. - Применять флаги
re.MULTILINEилиre.IGNORECASEдля обработки многострочных текстов и нечувствительности к регистру.
Для сложных шаблонов рекомендуется тестировать регулярные выражения отдельно, чтобы избежать непреднамеренной замены текста.
Разделение строк по сложным шаблонам с re.split
Функция re.split позволяет разбивать строки не только по фиксированным символам, но и по сложным регулярным выражениям. Это удобно при работе с текстами, содержащими различные разделители одновременно, например пробелы, запятые и точки с запятой.
Пример базового использования:
import re
text = "apple, banana; orange grape"
result = re.split(r'[,; ]+', text)
print(result) # ['apple', 'banana', 'orange', 'grape']
В данном примере шаблон r'[,; ]+' означает «разделители: запятая, точка с запятой или пробел, один или несколько раз». Это позволяет объединить разные разделители в одну операцию.
При необходимости сохранить сами разделители в результате, можно использовать захватывающие группы (...):
text = "word1,word2;word3 word4"
result = re.split(r'(,|;| )', text)
print(result) # ['word1', ',', 'word2', ';', 'word3', ' ', 'word4']
Для динамических шаблонов удобно формировать регулярное выражение через список символов:
delimiters = [',', ';', '|']
pattern = '|'.join(map(re.escape, delimiters))
text = "a,b;c|d"
result = re.split(pattern, text)
print(result) # ['a', 'b', 'c', 'd']
Следует учитывать, что re.split возвращает пустые строки при последовательных разделителях. Для их удаления рекомендуется применять фильтрацию:
text = "one,,two;;;three"
result = [x for x in re.split(r'[,;]+', text) if x]
print(result) # ['one', 'two', 'three']
Таблица ниже демонстрирует наиболее распространённые конструкции для сложных разделителей:
| Шаблон | Назначение | Пример |
|---|---|---|
[ ,;]+ |
Пробел, запятая или точка с запятой | re.split(r'[ ,;]+', 'a, b;c') |
\s* |
Любое количество пробельных символов | re.split(r'\s*', 'x y z') |
(,|;) |
Сохраняет запятые и точки с запятой | re.split(r'(,|;)', 'a,b;c') |
\d+ |
Разделение по числовым последовательностям | re.split(r'\d+', 'a12b34c') |
Использование re.split особенно эффективно для предварительной обработки логов, CSV-файлов с нестандартными разделителями и анализа текстов с переменным форматированием.
Использование групп и обратных ссылок для сложного анализа текста
Группы в модуле re позволяют объединять части регулярного выражения и извлекать их для последующего анализа. Группы создаются с помощью круглых скобок (). Каждая группа получает номер по порядку, начиная с 1, что позволяет ссылаться на них в шаблонах или извлекать данные через методы match и search.
Пример создания группы и извлечения данных:
import re
text = "Иванов Иван, 25 лет"
pattern = r"(\w+) (\w+), (\d+) лет"
match = re.search(pattern, text)
if match:
print(match.group(1)) # Иванов
print(match.group(2)) # Иван
print(match.group(3)) # 25
Обратные ссылки позволяют повторно использовать содержимое группы в том же регулярном выражении. Они обозначаются \\номер_группы. Это особенно полезно для проверки повторяющихся шаблонов или парных конструкций.
Пример проверки повторяющихся слов:
text = "тест тест пример"
pattern = r"\b(\w+)\b \1"
match = re.search(pattern, text)
if match:
print(match.group(1)) # тест
Рекомендации при работе с группами и обратными ссылками:
- Используйте именованные группы
(?P<имя>...)для удобства, особенно при множественных группах. - Для сложных шаблонов разбивайте выражение на логические части и тестируйте каждую группу отдельно.
- Обратные ссылки помогают проверять парные конструкции, например, кавычки или скобки, и избегать повторного написания одинаковых подшаблонов.
- Методы
findallиfinditerпозволяют извлекать все совпадения с группами, что ускоряет анализ больших текстов. - Не используйте слишком длинные группы без необходимости – это снижает читаемость и усложняет отладку.
Сочетание групп и обратных ссылок эффективно при парсинге логов, извлечении данных из форматов с повторяющимися структурами и проверке корректности текстов с шаблонной структурой.
Вопрос-ответ:
Как установить модуль re в Python и нужна ли дополнительная установка?
Модуль re входит в стандартную библиотеку Python, поэтому его не нужно устанавливать отдельно через pip или другие менеджеры пакетов. Чтобы начать работу, достаточно импортировать его в коде командой import re. После этого можно использовать все функции модуля для работы с регулярными выражениями, такие как поиск, замена и разбор строк.
В чем разница между функциями re.search() и re.match()?
Функция re.match() проверяет соответствие регулярного выражения только в начале строки. Если совпадение найдено, возвращается объект Match; если нет — None. В то время как re.search() ищет соответствие по всей строке и возвращает первый найденный объект Match. Например, для строки «Привет, мир» и шаблона «мир» re.match() вернёт None, а re.search() найдёт совпадение.
Как с помощью модуля re заменить все вхождения слова в тексте?
Для замены всех вхождений используется функция re.sub(pattern, repl, string), где pattern — регулярное выражение, которое нужно заменить, repl — строка или функция, на которую будет произведена замена, а string — исходная строка. Например, re.sub(r'кот', 'пёс', 'Мой кот любит спать') заменит все слова «кот» на «пёс», вернув строку «Мой пёс любит спать».
Что такое группы в регулярных выражениях и как их использовать в Python?
Группы в регулярных выражениях создаются с помощью круглых скобок и позволяют извлекать отдельные части совпадений. Например, в шаблоне r'(\\d{2})-(\\d{2})-(\\d{4})' каждая пара скобок создаёт группу, которая захватывает день, месяц и год даты. После поиска с помощью re.search() можно получить доступ к этим частям через методы group(1), group(2) и group(3). Это удобно для разбора сложных строк и выделения нужной информации.
