Към основното съдържание
Междинен Python2026-07-31 · 11 мин четене

Обяснение на Python Regex (2026)

Regex е най-страшната функция на Python. Не е толкова трудно — но 80% от уроците зареждат теорията отпред (\d, \w, алчен срещу мързелив), преди да ви покажат един шаблон, който всъщност бихте използвали в реален код. Този урок обръща това.

Ще разгледаме: основите на re модула, петте шаблона, които покриват 90% от реалната работа, кога re.compile действително помага, именувани групи срещу номерирани и четирите случая, в които regex е ГРЕШНИЯТ инструмент.

Модулът за 60 секунди

Всичко живее в модула re на stdlib. Три функции покриват повечето нужди:

▶ 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 (обработва крайни случаи като userinfo + 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 обработва вложени кавички, екранирани символи, Unicode и всеки RFC 8259 edge case. Анализът на регулярни изрази 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 (основен, 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.