Что такое регулярные выражения и зачем они нужны
Знакомимся с идеей текстовых шаблонов и понимаем, какие задачи решают регулярки.
Регулярное выражение — это строка-шаблон, которая описывает множество строк сразу: не один конкретный текст, а правило, которому текст должен соответствовать.
Проблема, которую они решают
Представьте, что в большом тексте нужно найти все номера телефонов, или проверить, что введённый email вообще похож на email, или вытащить из лог-файла все даты. Решать это вручную — циклами по символам, бесконечными if и find — долго и хрупко. Регулярное выражение описывает образец искомого текста одной короткой строкой, а движок сам находит все совпадения.
Например, шаблон «четыре цифры подряд» в синтаксисе регулярок выглядит как \d{4}. Шаблон «слово, потом собака @, потом снова слово и точка» приблизительно описывает email. Вместо десятков строк кода — одна строка-описание.
Где это применяют
- Валидация: проверить, что строка — это телефон, индекс, дата, пароль нужного формата.
- Поиск и извлечение: вытащить из текста все ссылки, цены, хештеги, id.
- Замена и очистка: убрать лишние пробелы, вырезать HTML-теги, переформатировать дату.
- Разбор данных: распарсить строку лога на IP, метод запроса и код ответа.
Регулярки встроены почти везде: в Python, JavaScript, Java, C#, Go, PHP, в текстовых редакторах (поиск с галочкой «regex»), в утилитах grep, sed, awk. Синтаксис между ними отличается в мелочах, поэтому, освоив его один раз, вы будете применять навык всюду.
Первый рабочий пример
В Python регулярки живут в стандартном модуле re — его не нужно ставить отдельно. Найдём первую группу цифр в строке:
import re
text = "Заказ №2024 готов к отгрузке"
match = re.search(r"\d+", text)
print(match.group())
Вывод:
2024
Здесь \d означает «любая цифра», а + — «одна или больше». То есть \d+ читается как «подряд идущие цифры». Функция re.search нашла первое такое место в строке, а match.group() вернул сам найденный текст.
Сырые строки r"..."
Обратите внимание на r перед кавычками: r"\d+". Это сырая строка (raw string). В обычной строке Python обратный слэш — спецсимвол (\n — перенос строки), а в регулярках обратный слэш тоже значимый. Префикс r говорит Python не трогать слэши, и они доходят до движка регулярок в первозданном виде. Всегда пишите паттерны в сырых строках — это избавит от путаницы с экранированием.
Итог
- Регулярка — это шаблон, описывающий множество строк, а не конкретный текст.
- Их применяют для валидации, поиска, замены и разбора текста.
- В Python регулярки — это модуль
reиз стандартной библиотеки. - Паттерны пишут в сырых строках
r"...", чтобы не воевать с обратными слэшами.