Регулярные выражения в Python: модуль re простыми словами с примерами

Регулярные выражения в Python: модуль re простыми словами с примерами

Регулярные выражения в Python: модуль re простыми словами с примерами

Если вы искали понятное руководство по запросу «регулярные выражения в Python re примеры» — вы по адресу. Ниже собраны базовые концепции, практические шаблоны и советы, которые помогут уверенно пользоваться модулем re уже сегодня.

Что такое регулярные выражения и когда их применять

Регулярные выражения — это язык шаблонов для поиска и преобразования текста. Они незаменимы, когда нужно:

  • находить и извлекать части строк (номера, даты, email-адреса);
  • заменять фрагменты по сложным правилам;
  • проверять формат ввода (валидация).
  • Важно: для парсинга сложных форматов (например, HTML) лучше использовать специализированные парсеры. Регулярки — для гибких текстовых шаблонов.

    Быстрый старт с модулем re

    Подключение и базовые функции:

    import re
    
    text = "Python 3.12 выпущен!"
    
    # search: найти первое совпадение где угодно в строке
    m = re.search(r"Python (d+.d+)", text)
    if m:
        print(m.group(1))  # 3.12
    
    # match: начать поиск строго с начала строки
    print(re.match(r"Python", text) is not None)  # True
    
    # findall: вернуть все совпадения списком строк/кортежей
    print(re.findall(r"d+", text))  # ['3', '12']
    
    # sub: замена по шаблону
    print(re.sub(r"d+", "X", text))  # Python X.X выпущен!
    
    # split: разбиение по регулярному выражению
    print(re.split(r"s+", text))  # ['Python', '3.12', 'выпущен!']
    

    В шаблонах используйте «сырые» строки r»…», чтобы не экранировать обратные слеши Python-строкой.

    Основные элементы шаблонов re

  • Символьные классы: d (цифра), w (буква/цифра/»_»), s (пробел), их отрицания: D, W, S.
  • Якоря: ^ — начало строки, $ — конец строки, b — граница слова.
  • Квантификаторы: * (0+), + (1+), ? (0 или 1), {m,n} — диапазон повторений.
  • Группы: ( … ) — группировка и захват; (?: … ) — без захвата; (?P<name> … ) — именованные группы.
  • Альтернация: A|B — «или».
  • Жадность и ленивость: по умолчанию квантификаторы жадные; добавьте ? для ленивых версий: *?, +?, {m,n}?
  • import re
    
    s = "Email: test.user@mail.com и test2@mail.ru"
    
    # Группы и именованные группы
    pat = r"(?P<name>[w.]+)@(?P<domain>[w.]+)"
    for m in re.finditer(pat, s):
        print(m.group("name"), m.group("domain"))
        # test.user mail.com
        # test2 mail.ru
    
    # Жадность vs ленивость
    html = "<div>one</div><div>two</div>"
    print(re.findall(r"<div>.*</div>", html))    # жадно: один большой матч
    print(re.findall(r"<div>.*?</div>", html)) # лениво: два отдельных
    

    Полезные рецепты (copy-paste)

    1) Извлечь все числа (целые и десятичные, с минусом)

    import re
    s = "Температуры: -3, 0, 12.5 и -7.25 градуса"
    nums = re.findall(r"-?d+(?:.d+)?", s)
    print(nums)  # ['-3', '0', '12.5', '-7.25']
    

    2) Простая валидация email

    Подойдёт для базовой проверки, не для RFC-полной валидации.

    import re
    emails = ["test@mail.com", "bad@@mail", "x@y.z"]
    pat = re.compile(r"^[w.+-]+@[w-]+.[A-Za-z]{2,}$")
    for e in emails:
        print(e, bool(pat.match(e)))
    # test@mail.com True, bad@@mail False, x@y.z False
    

    3) Разбить по нескольким разделителям (запятая, точка с запятой, пробелы)

    import re
    s = "one, two;three   four"
    parts = [p for p in re.split(r"[;,s]+", s) if p]
    print(parts)  # ['one', 'two', 'three', 'four']
    

    4) Сжать подряд идущие пробелы до одного

    import re
    s = "  Hello    world   !  "
    print(re.sub(r"s+", " ", s).strip())  # Hello world !
    

    5) Парсинг лога с именованными группами

    import re
    line = '127.0.0.1 - - [10/Feb/2026:10:24:42 +0000] "GET /index.html HTTP/1.1" 200 512'
    pat = re.compile(
        r"^(?P<ip>S+)s+S+s+S+s+[(?P<ts>[^]]+)]s+"(?P<method>S+)s+(?P<path>S+)s+HTTP/(?P<httpver>d+.d+)"s+(?P<code>d+)s+(?P<size>d+)"
    )
    m = pat.search(line)
    print(m.groupdict())
    # {'ip': '127.0.0.1', 'ts': '10/Feb/2026:10:24:42 +0000', 'method': 'GET', 'path': '/index.html', 'httpver': '1.1', 'code': '200', 'size': '512'}
    

    6) Все слова, начинающиеся на «py», без учёта регистра

    import re
    text = "Python и pytest полезны, а pYramid — веб-фреймворк"
    print(re.findall(r"bpyw*", text, flags=re.IGNORECASE))
    # ['Python', 'pytest', 'pYramid']
    

    Флаги re, которые стоит знать

  • re.IGNORECASE (re.I): игнорировать регистр букв.
  • re.MULTILINE (re.M): якоря ^ и $ работают для каждой строки отдельно.
  • re.DOTALL (re.S): точка «.» матчится и с переводом строки.
  • re.VERBOSE (re.X): писать шаблоны с пробелами и комментариями для читаемости.
  • import re
    text = "FoonbarnBaz"
    print(re.findall(r"^bw+", text, flags=re.I | re.M))  # ['bar', 'Baz']
    
    pat = re.compile(r"""
        ^                 # начало строки
        (+7|8)s?       # код страны
        (?d{3})?s?  # код города
        d{3}-?d{2}-?d{2}$  # номер
    """, flags=re.X)
    print(bool(pat.match("+7 (495) 123-45-67")))  # True
    

    Компиляция шаблонов: когда это нужно

    Если одно и то же выражение используется много раз, выгодно скомпилировать его один раз.

    import re
    pat = re.compile(r"bw{3,}b")
    texts = ["short", "some long text", "another line"]
    for t in texts:
        print(pat.findall(t))
    

    Советы и лучшие практики

  • Используйте r»…» для паттернов, чтобы не запутаться с экранированием.
  • Старайтесь якорить шаблоны ^…$, когда валидируете полную строку.
  • Для читаемости длинных паттернов применяйте re.VERBOSE и комментарии.
  • Проверяйте шаблоны на тестовых строках. Онлайн-песочницы (например, regex101) помогают быстрее отладить идею; учитывайте режим «Python».
  • Не злоупотребляйте «жадными» квантификаторами. Если нужно минимальное покрытие — используйте ленивые версии *?, +?, {m,n}?.
  • Хотите системно прокачать Python и закрепить практикой десятки подобных приёмов? Загляните в Пошаговый курс «Python с Нуля до Гуру» — там по полочкам разложены основы, задания и реальные мини‑проекты.

    Короткая шпаргалка по re

    # Функции
    re.search(p, s)   # первое совпадение
    re.match(p, s)    # с начала строки
    re.findall(p, s)  # список совпадений
    re.finditer(p, s) # итератор совпадений
    re.sub(p, rep, s) # замена
    re.split(p, s)    # разбиение
    re.compile(p, flags=0) # компиляция
    
    # Частые классы/якоря/квантификаторы
    d w s  ^  $  b  *  +  ?  {m,n}  |  ( )  (?: )  (?P<name> )
    

    Итог

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

    Источник

    НЕТ КОММЕНТАРИЕВ

    Оставить комментарий