re — Регулярные выражения
Модуль re предоставляет операции поиска по шаблону, валидации и обработки текста с помощью регулярных выражений.
import re
Базовый поиск
import re
# Поиск в любом месте строки
match = re.search(r'\d+', 'Возраст: 25 лет')
if match:
print(match.group()) # '25'
print(match.start()) # 9
# Поиск в начале строки
match = re.match(r'Hello', 'Hello World')
# Полное совпадение
match = re.fullmatch(r'\d{3}-\d{4}', '123-4567')
Поиск всех совпадений
import re
text = "Звоните 555-1234 или 555-5678"
numbers = re.findall(r'\d{3}-\d{4}', text)
print(numbers) # ['555-1234', '555-5678']
# Итератор объектов match
for m in re.finditer(r'\d{3}-\d{4}', text):
print(f"Найдено {m.group()} на позиции {m.start()}")
Замена
import re
# Простая замена
result = re.sub(r'World', 'Python', 'Hello World')
# Замена через функцию
def double(match):
return str(int(match.group()) * 2)
re.sub(r'\d+', double, 'Цена: 10, Налог: 5')
# 'Цена: 20, Налог: 10'
Разделение
import re
re.split(r'[,;\s]+', 'один, два; три четыре')
# ['один', 'два', 'три', 'четыре']
Краткий справочник синтаксиса
| Шаблон |
Значение |
. |
Любой символ (кроме \n) |
\d |
Цифра [0-9] |
\w |
Символ слова [a-zA-Z0-9_] |
\s |
Пробельный символ |
* |
0 или более |
+ |
1 или более |
? |
0 или 1 |
{n,m} |
от n до m повторений |
^ / $ |
Начало / конец строки |
[abc] |
Класс символов |
(...) |
Группа захвата |
\b |
Граница слова |
Флаги
re.IGNORECASE # Без учёта регистра (re.I)
re.MULTILINE # ^ и $ по границам строк (re.M)
re.DOTALL # . включает перевод строки (re.S)
re.VERBOSE # Комментарии в шаблоне (re.X)
Частые ошибки
- Жадный vs ленивый —
.* жадный, .*? ленивый (минимальное совпадение)
- Сырые строки — всегда используйте
r'шаблон' для избежания проблем с \
match и search — match проверяет только начало строки
- Катастрофический откат — вложенные квантификаторы
(a+)+ могут зависнуть
Официальная документация
re — Regular expression operations
Полный справочник API (API Reference)
Важные функции
| Функция |
Описание |
re.compile(pattern, flags=0) |
Компилирует паттерн регулярного выражения в объект. |
re.search(pattern, string) |
Ищет первое совпадение с паттерном в любом месте строки. |
re.match(pattern, string) |
Ищет совпадение только в самом начале строки. |
re.fullmatch(pattern, string) |
Проверяет, совпадает ли вся строка целиком с паттерном. |
re.split(pattern, string) |
Разбивает строку по паттерну. |
re.findall(pattern, string) |
Возвращает все непересекающиеся совпадения в виде списка строк. |
re.sub(pattern, repl, string) |
Заменяет все вхождения паттерна на строку repl. |
Объект Match (Результат)
| Метод/Атрибут |
Описание |
Match.group([group1]) |
Возвращает найденную подстроку или конкретную группу захвата. |
Match.groups() |
Возвращает кортеж всех захваченных групп. |
Match.start() |
Индекс начала совпадения в исходной строке. |
Match.end() |
Индекс конца совпадения. |
Match.span() |
Кортеж (start, end). |