Регулярные выражения (regex) — мощный инструмент для поиска и обработки текста. Они выглядят загадочно, но после изучения базового синтаксиса вы будете решать задачи, которые раньше требовали десятков строк кода.

Основы синтаксиса

# regex_basics.py
import re

# Метасимволы:
# .   — любой символ кроме 

# *   — 0 или более предыдущего
# +   — 1 или более предыдущего
# ?   — 0 или 1 (необязательный)
# ^   — начало строки
# $   — конец строки
# \d  — цифра [0-9]
# \w  — буква, цифра, _
# \s  — пробельный символ

text = "Python 3.11 вышел в 2022 году"
numbers = re.findall(r'\d+', text)
# ['3', '11', '2022']

Основные функции модуля re

# re_functions.py
import re

email = "user@example.com"
pattern = rr'[\w.+-]+@[\w-]+\.[a-z]{2,}'

# match — только с начала строки
# search — первое вхождение в любом месте
m = re.search(pattern, "Пиши на user@example.com")
if m:
    print(m.group())      # user@example.com

# findall — все вхождения (список строк)
# finditer — все вхождения (итератор Match)
      Регулярные выражения и текст
      
# sub — замена result = re.sub(r'\d', '*', "tel: 79991234567") # "tel: ***********"

// Raw strings r'' в regex

Всегда используйте r'' (raw string) для паттернов. Без r: '\d' (два символа — обратный слеш + d). С r: r'\d' (один символ — буква d с особым значением в regex). Это избегает двойного экранирования и делает паттерны читаемыми.

Группы захвата

# groups.py
import re

date = "2024-03-15"

# Обычные группы (нумерованные)
m = re.match(rr'(\d{4})-(\d{2})-(\d{2})', date)
year, month, day = m.groups()

# Именованные группы — лучше для читаемости
m = re.match(
    rr'(?P<year>\d{4})-(?P<month>\d{2})-(?P<day>\d{2})', date
)
print(m.group('year'))  # 2024

Lookahead и Lookbehind

# lookahead.py
# (?=...) positive lookahead — за совпадением следует
prices = "100 USD, 200 EUR, 300 RUB"
usd_amounts = re.findall(rr'\d+(?= USD)', prices)
# ['100']

# (?<=...) positive lookbehind — перед совпадением стоит
after_dollar = re.findall(rr'(?<=\$)\d+', "цена: $42")
# ['42']
Python re модуль и regex