Перейти к основному содержимому
Средний уровень Python2026-07-31 · 11 мин чтения

Объяснение регулярных выражений Python (2026)

Regex — самая опасная функция Python. Это не так уж и сложно — но 80% руководств сначала загружают теорию (\d, \w, жадный против ленивого), прежде чем показать вам один шаблон, который вы действительно будете использовать в реальном коде. Этот урок переворачивает это.

Мы рассмотрим: основы модуля re, пять шаблонов, которые охватывают 90% реальной работы, когда re.compile действительно помогает, именованные группы вместо нумерованных и четыре случая, когда регулярное выражение является НЕПРАВИЛЬНЫМ инструментом.

Модуль за 60 секунд

Все находится в модуле stdlib re. Три функции удовлетворяют большинство потребностей:

▶ PYTHONeditable · runs in your browser

Правило: используйте «re.search», если сомневаетесь. re.match проверяет только начало; забыв, что это приводит к «моему регулярному выражению не соответствует!» 30 минут потеряно.

Необработанные строки — всегда используйте их

Префикс r"...." отключает интерпретацию обратной косой черты. Без него "\d" становится "\\d" в Python, который механизм регулярных выражений видит как \d — тот же результат, но только случайно и только для \d. "\n" в регулярном выражении — это новая строка, а не два символа ` + n`.

▶ PYTHONeditable · runs in your browser

Мышечная память: каждый литерал регулярного выражения начинается с «r». Никаких исключений.

5 шаблонов, которые охватывают 90% реальной работы

1. Извлечь все целые числа из текста

▶ PYTHONeditable · runs in your browser

Примечание. 199.99 разделяется на ['199', '99'] — \d+ не пересекает точку. Используйте r"\d+(?:\.\d+)?" для необязательных десятичных знаков:

▶ PYTHONeditable · runs in your browser

2. Нормализовать пробелы

▶ PYTHONeditable · runs in your browser

\s+ соответствует любому набору пробелов/табуляции/новой строки. Замените одним пробелом, зачистите края. Это ответ Python на sed -E 's/[[:space:]]+/ /g'.

3. Извлеките имя хоста из URL-адреса

▶ PYTHONeditable · runs in your browser

Круглые скобки создают группу захвата; .group(1) возвращает свое содержимое. [^/:]+ = "один или несколько символов, отличных от / или :" — останавливается на разделителе порта ИЛИ пути.

Для анализа рабочих URL-адресов используйте urllib.parse.urlparse (обрабатывает крайние случаи, такие как информация о пользователе + IPv6). Regex предназначен для быстрого извлечения.

4. Неправильная проверка электронной почты

НЕТ регулярного выражения, которое полностью проверяет электронную почту в соответствии с RFC 5322. Любой, кто говорит вам обратное, что-то продает. Но этот ловит 99% реальных адресов, не отклоняя ложно хорошие:

▶ PYTHONeditable · runs in your browser

Якоря (^ и $) обеспечивают полное совпадение строк. Без них будет соответствовать "foo@bar" внутри более крупного предложения.

Производство: отправьте электронное письмо с подтверждением. Это ЕДИНСТВЕННЫЙ надежный валидатор электронной почты.

5. Именованные группы захвата

Нумерованные группы ((...) + .group(1)) подходят для 2-3 захватов. Помимо этого, выигрывают имена:

▶ PYTHONeditable · runs in your browser

.groupdict() возвращает список всех именованных групп. Добавляйте/изменяйте порядок групп, не нарушая каждый сайт вызова, который ссылается на .group(3).

re.compile — когда это действительно помогает

▶ PYTHONeditable · runs in your browser

Библиотека stdlib поддерживает небольшой кэш скомпилированных шаблонов (размер по умолчанию 512), поэтому одноразовые вызовы re.search(pattern, text) фактически бесплатны после первого попадания. re.compile явно помогает, когда:

1. Узор используется внутри плотного цикла (миллионы спичек).

2. Вы хотите сохранить шаблон как константу уровня модуля для возможности grep.

3. Вам нужны .finditer(), .pattern, .flags для скомпилированного объекта.

Не перекомпилируйте. Каждая повторная компиляция на уровне модуля добавляет небольшие затраты времени на импорт.

Общие флаги

▶ PYTHONeditable · runs in your browser

Объедините с |: re.IGNORECASE | re.MULTILINE.

Когда регулярное выражение — НЕПРАВИЛЬНЫЙ инструмент

1. Парсинг HTML/XML → используйте настоящий парсер

▶ PYTHONeditable · runs in your browser

Классическому ответу Stack Overflow уже 20 лет, и он все еще верен.

2. Анализ JSON → используйте json

Модуль json обрабатывает вложенные кавычки, экранированные символы, Unicode и все крайние случаи RFC 8259. Анализ JSON с помощью регулярных выражений является сигналом анти-шаблона.

3. Анализ дат → используйте dateutil или datetime.strptime

dateutil.parser.parse("2026-07-30") принимает любой формат, который может ввести человек. datetime.strptime эффективно обрабатывает известные форматы. Оба обрабатывают часовые пояса. Regex придется изобрести все это заново.

4. Вложенные/рекурсивные шаблоны → используйте генератор синтаксического анализатора

Совпадающие скобки, вложенный JSON, сбалансированные выражения формально выходят за рамки возможностей регулярных выражений (территория бесконтекстной грамматики). Используйте pyparsing/lark/ANTLR — или просто пройдитесь по строке небольшим парсером.

Отладка регулярного выражения

Используйте regex101.com (выберите вариант «Python»). Вставьте шаблон + образец текста; он выделяет совпадения в реальном времени, объясняет каждый метасимвол и показывает именованные группы. Самый быстрый способ интуитивного изучения регулярных выражений.

Для отладки на уровне кода re.DEBUG печатает скомпилированный конечный автомат:

▶ PYTHONeditable · runs in your browser

Практика

Напишите регулярное выражение для каждого. Решения ниже.

1. Извлеките номер версии из «Python 3.13.2 (main, 15 января 2026, 10:32:11)» — должно вернуться «3.13.2».

2. Разделите "яблоко,банан;вишневый апельсин" по любому разделителю (,, ; или пробел).

3. Перепишите foo.bar_baz-123 как FOO.BAR_BAZ-123 (только заглавные буквы, оставьте цифры и знаки препинания).

Решения:

▶ PYTHONeditable · runs in your browser

Regex становится суперсилой, когда вы преодолеваете первые 10 шаблонов. Хитрость заключается в том, чтобы построить мышечную память на пяти вышеперечисленных упражнениях — они охватывают 90% реальной работы. Воспользуйтесь настоящим парсером в тот момент, когда вы обнаружите, что пишете обратные ссылки, чтобы сбалансировать круглые скобки.

Следующий шаг: уроки по регулярному выражению и обработке текста в разделе «Автоматизация» — попрактикуйтесь в файлах журналов, данных CSV и задачах очистки веб-страниц на реальном Python, работающем в вашем браузере.

Готовы попробовать?

15 уроки бесплатно после бесплатной регистрации — без карты. Попробуйте платформу, а затем принимайте решение.

Начни бесплатно →

Or unlock every lesson

Pro — $12/mo, unlimited AI, cancel any time. Refund within 14 days worldwide.

See Pro plans →

Get one Python lesson + one career idea every Friday

No spam, no "buy our course now". Three bullets, every Friday. Unsubscribe with one click.