Перейти до основного вмісту
Проміжний Python2026-07-31 · 11 хв читання

Пояснення регулярного виразу Python (2026)

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

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

Модуль за 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() повертає dict усіх іменованих груп. Додайте/змініть порядок груп, не порушуючи кожен сайт виклику, який посилався на .group(3).

re.compile — коли це дійсно допомагає

▶ PYTHONeditable · runs in your browser

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

1. Візерунок використовується всередині щільної петлі (мільйони сірників).

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

3. Вам потрібні .finditer(), .pattern, .flags для скомпільованого об'єкта.

Не надто компілюйте. Кожна re.compile на рівні модуля додає невелику вартість імпорту.

Загальні прапори

▶ PYTHONeditable · runs in your browser

Поєднайте з |: re.IGNORECASE | re.MULTILINE.

Коли регулярний вираз є НЕПРАВИЛЬНИМ інструментом

1. Розбір HTML / XML → використовуйте справжній парсер

▶ PYTHONeditable · runs in your browser

Класичній відповіді Stack Overflow на це 20 років, і вона все ще актуальна.

2. Розбір JSON → використовуйте json

Модуль json обробляє вкладені лапки, екрановані символи, Юнікод і всі регістри RFC 8259. Регулярний аналіз JSON є сигналом проти шаблону.

3. Розбір дат → використовуйте dateutil або datetime.strptime

dateutil.parser.parse("2026-07-30") приймає будь-який формат, який може ввести людина. datetime.strptime ефективно обробляє відомі формати. Обидва обробляють часові пояси. Регулярному виразу доведеться все це винайти заново.

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

Регулярний вираз — це суперсила, якщо ви пройшли перші 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.