Регулярные выражения в Python (модуль re)
🔍 Что такое регулярные выражения?
Регулярные выражения (RegEx) — это мощный инструмент для поиска, замены и анализа текста по заданному шаблону. Представьте себе «умный Ctrl+F», который ищет не только точные совпадения, но и сложные конструкции: email-адреса, номера телефонов, хэштеги и многое другое.
В Python для работы с регулярными выражениями используется модуль re. Давайте его импортируем:
import re
🧩 Основные метасимволы
RegEx-шаблоны строятся на метасимволах — специальных символах с особым значением:
.— любой символ, кроме переноса строки\d— цифра (0-9)\w— буква, цифра или нижнее подчёркивание\s— пробельный символ (пробел, табуляция и т.д.)^— начало строки$— конец строки*— 0 или более повторений+— 1 или более повторений?— 0 или 1 повторение
Пример поиска цифр в тексте:
text = "Заказ №12345 от 12.05.2023"
numbers = re.findall(r'\d+', text)
print(numbers) # ['12345', '12', '05', '2023']
🔥 Основные методы модуля re
Модуль re предлагает несколько ключевых методов:
re.search()— ищет первое совпадение с шаблономre.findall()— возвращает все совпадения в виде спискаre.sub()— заменяет совпадения на указанный текстre.split()— разделяет строку по шаблону
Пример с email-адресами:
text = "Контакты: user@example.com, support@company.org"
emails = re.findall(r'[\w\.-]+@[\w\.-]+', text)
print(emails) # ['user@example.com', 'support@company.org']
🎯 Группы и квантификаторы
Круглые скобки () создают группы, которые можно извлекать отдельно. Квантификаторы задают количество повторений:
{n}— ровно n раз{n,}— n и более раз{n,m}— от n до m раз
Разбор даты:
date = "2023-05-15"
match = re.search(r'(\d{4})-(\d{2})-(\d{2})', date)
if match:
print(f"Год: {match.group(1)}, Месяц: {match.group(2)}, День: {match.group(3)}")
⚡ Продвинутые техники
Жадные и ленивые квантификаторы
По умолчанию квантификаторы жадные (захватывают максимум возможного). Добавление ? делает их ленивыми:
text = "<div>Первый</div><div>Второй</div>"
# Жадный поиск
print(re.findall(r'<div>.*</div>', text)) # ['<div>Первый</div><div>Второй</div>']
# Ленивый поиск
print(re.findall(r'<div>.*?</div>', text)) # ['<div>Первый</div>', '<div>Второй</div>']
Флаги регулярных выражений
re.IGNORECASE— игнорирование регистраre.MULTILINE— многострочный режимre.DOTALL— точка включает перенос строки
text = "Python is great\npython is versatile"
matches = re.findall(r'^python', text, flags=re.IGNORECASE | re.MULTILINE)
print(matches) # ['Python', 'python']
💡 Практический пример: Валидация пароля
Проверим, что пароль содержит: - Не менее 8 символов - Хотя бы одну цифру - Хотя бы одну заглавную букву - Хотя бы один специальный символ
def validate_password(password):
if len(password) < 8:
return False
if not re.search(r'\d', password):
return False
if not re.search(r'[A-Z]', password):
return False
if not re.search(r'[!@#$%^&*(),.?":{}|<>]', password):
return False
return True
print(validate_password("StrongPass123!")) # True
print(validate_password("weak")) # False
📌 Закрепление материала
Попробуйте решить эти задачи:
- Извлечь все хэштеги из текста (слова, начинающиеся с #)
- Найти все номера телефонов в формате +7(XXX)XXX-XX-XX
- Разбить лог-файл на отдельные сообщения по времени
Для углублённого изучения регулярных выражений рекомендую курс Данилы Бежина на YouTube: https://www.youtube.com/@DanilaBezhin. Он объясняет сложные концепции с потрясающей ясностью!
Регулярные выражения — это суперспособность в мире программирования. Сначала они кажутся сложными, но с практикой становятся вашим лучшим другом для обработки текста. Экспериментируйте, тестируйте шаблоны на https://regex101.com/ и внедряйте в свои проекты!