Модуль `re`: основные функции
Регулярные выражения в Python: обзор и возможности
Регулярные выражения (RegEx) — это мощный инструмент для обработки текста, позволяющий находить, извлекать и изменять данные по заданным шаблонам. В Python для работы с ними используется модуль re, который предоставляет множество функций для эффективной работы с текстом. В этой статье мы рассмотрим основные возможности регулярных выражений и их применение в Python.
Модуль re: основные функции
Модуль re включает ключевые методы для работы с RegEx:
-
re.search(pattern, string)
Проверяет, есть ли в строке подстрока, соответствующая шаблону. Возвращает объектMatchпри успехе.import re result = re.search(r'\d{2}', 'Возраст: 25 лет') print(result.group()) # 25 -
re.findall(pattern, string)
Возвращает список всех совпадений.numbers = re.findall(r'\d+', '10 яблок, 5 апельсинов') print(numbers) # ['10', '5'] -
re.split(pattern, string)
Разделяет строку по шаблону.parts = re.split(r'\W+', 'Hello, world! Python') print(parts) # ['Hello', 'world', 'Python'] -
re.sub(pattern, repl, string)
Заменяет совпадения на указанную строку.text = re.sub(r'\s+', ' ', 'Много пробелов здесь.') print(text) # 'Много пробелов здесь.'
Синтаксис регулярных выражений
RegEx используют специальные символы для описания шаблонов:
-
Метасимволы:
\d— цифра,\w— буква/цифра/нижнее подчеркивание,\s— пробел..— любой символ, кроме переноса строки.^— начало строки,$— конец строки.
-
Квантификаторы:
*— 0 или более повторений.+— 1 или более.?— 0 или 1.{n,m}— отnдоmповторений.
-
Группы:
- Круглые скобки
()создают группы для извлечения данных. - Используйте
|для логического “ИЛИ”.
match = re.search(r'(\d{2})-(\d{2})-(\d{4})', 'Дата: 12-05-2023') print(match.groups()) # ('12', '05', '2023') - Круглые скобки
Практические примеры
-
Поиск email-адресов:
text = 'Контакты: user@example.com, support@site.com' emails = re.findall(r'[\w.-]+@[\w.-]+\.\w+', text) print(emails) # ['user@example.com', 'support@site.com'] -
Валидация номера телефона:
phone = '+7 (912) 345-67-89' is_valid = re.fullmatch(r'\+7\s\(\d{3}\)\s\d{3}-\d{2}-\d{2}', phone) print(bool(is_valid)) # True -
Извлечение хештегов:
hashtags = re.findall(r'#\w+', 'Python #программирование #regex') print(hashtags) # ['#программирование', '#regex']
Флаги для оптимизации
re.IGNORECASE(илиre.I) — игнорирует регистр.re.MULTILINE(илиre.M) — учитывает начало/конец строк в многострочном тексте.re.DOTALL(илиre.S) — включает переносы строк в символ..
Пример:
text = 'Строка1\nСтрока2'
result = re.findall(r'^строка\d', text, flags=re.I | re.M)
print(result) # ['Строка1', 'Строка2']
Советы и предостережения
- Производительность: Сложные RegEx могут замедлять выполнение кода. Используйте предварительную компиляцию с
re.compile()для повторяющихся шаблонов. - Читаемость: Длинные выражения сложно поддерживать. Комментируйте код или разбивайте шаблоны на части.
- Альтернативы: Для простых задач (например, проверка начала строки) используйте встроенные строковые методы (
startswith(),split()).
Заключение
Регулярные выражения в Python — незаменимый инструмент для сложной обработки текста. Однако их стоит применять с осторожностью, избегая избыточности. Для тестирования шаблонов воспользуйтесь онлайн-сервисами вроде regex101.com. Помните: RegEx — это мощь, но с большой силой приходит и большая ответственность!