Python Regex Explained (2026)
Regex je najobávanejšou funkciou Pythonu. Nie je to až také ťažké – ale 80 % tutoriálov najprv načíta teóriu (\d, \w, chamtivý vs lenivý) predtým, ako vám ukáže jeden vzor, ktorý by ste skutočne použili v skutočnom kóde. Tento tutoriál to prevracia.
Pokryjeme: základy modulu re, päť vzorov, ktoré pokrývajú 90 % skutočnej práce, keď re.compile skutočne pomáha, pomenované skupiny vs očíslované a štyri prípady, keď je regulárny výraz NESPRÁVNY nástroj.
Modul za 60 sekúnd
Všetko žije v module stdlib re. Tri funkcie pokrývajú väčšinu potrieb:
Pravidlo: v prípade pochybností použite re.search. re.match iba kontroluje začiatok; zabudnutie vedie k "môj regulárny výraz sa nezhoduje!" Strata 30 minút.
Surové struny – vždy ich používajte
Predpona r"..."" zakazuje interpretáciu spätného lomítka. Bez toho sa "\d" v Pythone zmení na "\\d", čo motor regulárneho výrazu vidí ako \d — rovnaký výsledok, ale len náhodou a len pre \d. "\n" v regulárnom výraze je nový riadok, nie dva znaky + n`.
Svalová pamäť: každý literál regulárneho výrazu začína na „r“. Žiadne výnimky.
5 vzorov, ktoré pokrývajú 90 % skutočnej práce
1. Extrahujte z textu všetky celé čísla
Poznámka 199,99 sa delí na ['199', '99'] — \d+ neprekračuje bodku. Pre voliteľné desatinné miesta použite r"\d+(?:\.\d+)?":
2. Normalizujte biele znaky
\s+ zodpovedá ľubovoľnému počtu medzier / tabulátorov / nových riadkov. Nahraďte jednou medzerou, odstráňte okraje. Toto je odpoveď Pythonu na sed -E 's/[[:space:]]+/ /g'.
3. Extrahujte názov hostiteľa z adresy URL
Zátvorky vytvárajú zachytávaciu skupinu; .group(1) vráti svoj obsah. [^/:]+ = "jeden alebo viac znakov, ktoré nie sú / alebo :" — zastaví sa na oddeľovači portov ALEBO v ceste.
Na analýzu produkčnej adresy URL použite urllib.parse.urlparse (rieši okrajové prípady ako userinfo + IPv6). Regex je pre rýchlu a špinavú extrakciu.
4. Nefunkčné overenie e-mailu
NEEXISTUJE ŽIADNY regulárny výraz, ktorý by plne overoval e-maily podľa RFC 5322. Každý, kto vám povie niečo iné, niečo predáva. Ale táto zachytí 99 % skutočných adries bez falošného odmietnutia tých dobrých:
Kotvy (^ a $) vynútia zhodu na celý reťazec. Bez nich by "foo@bar" vo väčšej vete zodpovedalo.
Výroba: pošlite potvrdzujúci e-mail. Toto je JEDINÝ spoľahlivý overovač e-mailov.
5. Pomenované zachytávacie skupiny
Očíslované skupiny ((...) + .group(1)) sú vhodné pre 2-3 zábery. Okrem toho vyhrávajú mená:
.groupdict() vráti diktát všetkých pomenovaných skupín. Pridajte/zmeňte poradie skupín bez toho, aby ste prerušili všetky stránky volania, ktoré odkazovali na .group(3).
re.compile — keď to skutočne pomáha
Stdlib udržiava malú vyrovnávaciu pamäť kompilovaného vzoru (predvolená veľkosť 512), takže jednorazové volania re.search(pattern, text) sú efektívne zadarmo po prvom prístupe. re.compile výslovne pomáha, keď:
1. Vzor sa používa vo vnútri tesnej slučky (milióny zápaliek).
2. Vzor chcete uložiť ako konštantu na úrovni modulu pre schopnosť grep.
3. Na kompilovanom objekte potrebujete .finditer(), .pattern, .flags.
Neprekompilujte. Každý re.compile na úrovni modulu zvyšuje náklady na čas importu.
Spoločné vlajky
Skombinujte s |: re.IGNORECASE | re.MULTILINE.
Keď je regulárny výraz NESPRÁVNY nástroj
1. Analýza HTML / XML → použite skutočný syntaktický analyzátor
Klasická odpoveď Stack Overflow je stará 20 rokov a stále platí.
2. Analýza JSON → použite json
Modul json spracováva vnorené úvodzovky, špeciálne znaky, kódovanie Unicode a každý okrajový prípad RFC 8259. JSON na analýzu regulárneho výrazu je signál proti vzoru.
3. Analýza dátumov → použite dateutil alebo datetime.strptime
dateutil.parser.parse("2026-07-30") akceptuje každý formát, ktorý môže človek zadať. datetime.strptime efektívne spracováva známe formáty. Obe spravujú časové pásma. Regex by to všetko musel znovu objaviť.
4. Vnorené / rekurzívne vzory → použite generátor syntaktického analyzátora
Zhodné zátvorky, vnorené JSON, vyvážené výrazy sú formálne mimo dosahu regulárneho výrazu (územie bezkontextovej gramatiky). Použite pyparsing / lark / ANTLR — alebo jednoducho prejdite reťazec pomocou malého analyzátora.
Ladenie regulárneho výrazu
Použite regex101.com (vyberte príchuť „Python“). Prilepte vzor + vzorový text; zvýrazňuje zápasy v reálnom čase, vysvetľuje každý metaznak a zobrazuje pomenované skupiny. Najrýchlejší spôsob, ako sa intuitívne naučiť regulárny výraz.
Pre ladenie na úrovni kódu vypíše re.DEBUG kompilovaný stavový stroj:
Cvičte
Pre každý napíšte regulárny výraz. Riešenia nižšie.
1. Extrahujte číslo verzie z „Python 3.13.2 (hlavný, 15. januára 2026, 10:32:11)“ – malo by sa vrátiť „3.13.2“.
2. Rozdeľte výraz „jablko, banán; čerešňa pomaranč“ na ľubovoľný oddeľovač (“,, ;` alebo medzeru).
3. Prepíšte foo.bar_baz-123 ako FOO.BAR_BAZ-123 (len veľké písmená, ponechajte číslice a interpunkciu).
Riešenia:
Regex je superschopnosť, keď prejdete cez prvých 10 vzorov. Trik spočíva v budovaní svalovej pamäte na piatich vyššie uvedených - pokrývajú 90% skutočnej práce. Siahnite po skutočnom analyzátore v momente, keď sa pristihnete, že píšete spätné referencie do zátvoriek.
Ďalší krok: lekcie regulárneho výrazu + textového spracovania v stope automatizácie — precvičte si protokolové súbory, údaje CSV a úlohy zoškrabovania webu so skutočným jazykom Python spusteným vo vašom prehliadači.