Регулярные выражения в 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 предлагает несколько ключевых методов:

  1. re.search() — ищет первое совпадение с шаблоном
  2. re.findall() — возвращает все совпадения в виде списка
  3. re.sub() — заменяет совпадения на указанный текст
  4. 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

📌 Закрепление материала

Попробуйте решить эти задачи:

  1. Извлечь все хэштеги из текста (слова, начинающиеся с #)
  2. Найти все номера телефонов в формате +7(XXX)XXX-XX-XX
  3. Разбить лог-файл на отдельные сообщения по времени

Для углублённого изучения регулярных выражений рекомендую курс Данилы Бежина на YouTube: https://www.youtube.com/@DanilaBezhin. Он объясняет сложные концепции с потрясающей ясностью!

Регулярные выражения — это суперспособность в мире программирования. Сначала они кажутся сложными, но с практикой становятся вашим лучшим другом для обработки текста. Экспериментируйте, тестируйте шаблоны на https://regex101.com/ и внедряйте в свои проекты!

Скрыть рекламу навсегда

🧠 Учёба без воды и зубрёжки

Закрытый Boosty с наработками опытного преподавателя.

Объясняю сложное так, чтобы щелкнуло.

🚀 Забрать доступ к Boosty