Модуль `re`: основные функции

Модуль `re`: основные функции


Регулярные выражения в Python: обзор и возможности

Регулярные выражения (RegEx) — это мощный инструмент для обработки текста, позволяющий находить, извлекать и изменять данные по заданным шаблонам. В Python для работы с ними используется модуль re, который предоставляет множество функций для эффективной работы с текстом. В этой статье мы рассмотрим основные возможности регулярных выражений и их применение в Python.


Модуль re: основные функции

Модуль re включает ключевые методы для работы с RegEx:

  1. re.search(pattern, string)
    Проверяет, есть ли в строке подстрока, соответствующая шаблону. Возвращает объект Match при успехе.

    import re
    result = re.search(r'\d{2}', 'Возраст: 25 лет')
    print(result.group())  # 25
  2. re.findall(pattern, string)
    Возвращает список всех совпадений.

    numbers = re.findall(r'\d+', '10 яблок, 5 апельсинов')
    print(numbers)  # ['10', '5']
  3. re.split(pattern, string)
    Разделяет строку по шаблону.

    parts = re.split(r'\W+', 'Hello, world! Python')
    print(parts)  # ['Hello', 'world', 'Python']
  4. 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')

Практические примеры

  1. Поиск email-адресов:

    text = 'Контакты: user@example.com, support@site.com'
    emails = re.findall(r'[\w.-]+@[\w.-]+\.\w+', text)
    print(emails)  # ['user@example.com', 'support@site.com']
  2. Валидация номера телефона:

    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
  3. Извлечение хештегов:

    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']

Советы и предостережения

  1. Производительность: Сложные RegEx могут замедлять выполнение кода. Используйте предварительную компиляцию с re.compile() для повторяющихся шаблонов.
  2. Читаемость: Длинные выражения сложно поддерживать. Комментируйте код или разбивайте шаблоны на части.
  3. Альтернативы: Для простых задач (например, проверка начала строки) используйте встроенные строковые методы (startswith(), split()).

Заключение

Регулярные выражения в Python — незаменимый инструмент для сложной обработки текста. Однако их стоит применять с осторожностью, избегая избыточности. Для тестирования шаблонов воспользуйтесь онлайн-сервисами вроде regex101.com. Помните: RegEx — это мощь, но с большой силой приходит и большая ответственность!