Python Regex Explained (2026)
Regex je nejobávanější funkcí Pythonu. Není to tak těžké – ale 80 % výukových programů nejprve načte teorii (\d, \w, chamtivý vs líný), než vám ukáže jediný vzor, který byste skutečně použili ve skutečném kódu. Tento tutoriál to obrací.
Probereme: základy modulu re, pět vzorů, které pokrývají 90 % skutečné práce, kdy re.compile ve skutečnosti pomáhá, pojmenované skupiny vs očíslované a čtyři případy, kdy je regex ŠPATNÝ nástroj.
Modul za 60 sekund
Vše žije v modulu re stdlib. Tři funkce pokrývají většinu potřeb:
Pravidlo: v případě pochybností použijte re.search. re.match pouze kontroluje začátek; zapomenutí, které vede k "můj regulární výraz se neshoduje!" 30 minut ztracených.
Surové řetězce – vždy je používejte
Předpona r"..." zakáže interpretaci zpětného lomítka. Bez toho se "\d" v Pythonu změní na ,,\\d", což regex engine vidí jako ,,\d — stejný výsledek, ale pouze náhodou a pouze pro \d. "\n" v regulárním výrazu je nový řádek, nikoli dva znaky ` + n`.
Svalová paměť: každý literál regulárního výrazu začíná r. Žádné výjimky.
5 vzorů, které pokrývají 90 % skutečné práce
1. Extrahujte z textu všechna celá čísla
Poznámka 199,99 se dělí na ['199', '99'] — \d+ nepřekračuje tečku. Pro volitelná desetinná místa použijte r"\d+(?:\.\d+)?":
2. Normalizujte bílé znaky
\s+ odpovídá libovolnému počtu mezer / tabulátorů / nových řádků. Nahraďte jednou mezerou, odstraňte okraje. Toto je odpověď Pythonu na sed -E 's/[[:space:]]+/ /g'.
3. Extrahujte název hostitele z adresy URL
Závorky vytvářejí skupinu zachycení; .group(1) vrátí svůj obsah. [^/:]+ = "jeden nebo více znaků, které nejsou / nebo :" — končí na oddělovači portu NEBO v cestě.
Pro produkční analýzu URL použijte urllib.parse.urlparse (zvládá okrajové případy jako userinfo + IPv6). Regex je pro rychlou a špinavou extrakci.
4. Chybné ověření e-mailu
NEEXISTUJE ŽÁDNÝ regulární výraz, který by plně ověřoval e-maily podle RFC 5322. Každý, kdo vám tvrdí opak, něco prodává. Ale tato zachytí 99 % skutečných adres, aniž by falešně odmítla ty dobré:
Kotvy (^ a $) vynutí shodu celého řetězce. Bez nich by „foo@bar“` uvnitř větší věty odpovídalo.
Výroba: zašlete potvrzovací email. To je JEDINÝ spolehlivý e-mailový validátor.
5. Pojmenované skupiny zachycení
Očíslované skupiny ((...) + .group(1)) jsou vhodné pro 2-3 zachycení. Kromě toho vítězí jména:
.groupdict() vrací diktát všech pojmenovaných skupin. Přidejte/změňte pořadí skupin, aniž byste narušili všechny stránky volání, které odkazovaly na .group(3).
re.compile — když to skutečně pomáhá
Stdlib udržuje malou mezipaměť kompilovaného vzoru (výchozí velikost 512), takže jednorázová volání re.search(pattern, text) jsou po prvním zásahu prakticky zdarma. re.compile výslovně pomáhá, když:
1. Vzor se používá uvnitř těsné smyčky (miliony zápalek).
2. Chcete uložit vzor jako konstantu na úrovni modulu pro schopnost grep.
3. Na kompilovaném objektu potřebujete .finditer(), .pattern, .flags.
Nepřekompilujte. Každý re.compile na úrovni modulu zvyšuje náklady na čas importu.
Společné příznaky
Kombinujte s |: re.IGNORECASE | re.MULTILINE.
Když je regex ŠPATNÝ nástroj
1. Analýza HTML / XML → použijte skutečný parser
Klasická odpověď Stack Overflow na to je 20 let stará a stále platí.
2. Analýza JSON → použijte json
Modul json zpracovává vnořené uvozovky, uvozené znaky, Unicode a každý okrajový případ RFC 8259. JSON analyzující regulární výraz je signál proti vzoru.
3. Analýza dat → použijte dateutil nebo datetime.strptime
dateutil.parser.parse("2026-07-30") akceptuje všechny formáty, které člověk zadá. datetime.strptime efektivně zpracovává známé formáty. Oba zvládají časová pásma. Regex by to všechno musel znovu objevit.
4. Vnořené / rekurzivní vzory → použijte generátor parseru
Shodné závorky, vnořené JSON, vyvážené výrazy jsou formálně mimo síly regulárních výrazů (území bezkontextové gramatiky). Použijte pyparsing / lark / ANTLR — nebo jednoduše projděte řetězec pomocí malého analyzátoru.
Ladění regulárního výrazu
Použijte regex101.com (vyberte příchuť „Python“). Vložte vzor + ukázkový text; zvýrazňuje zápasy v reálném čase, vysvětluje každý metaznak a zobrazuje pojmenované skupiny. Nejrychlejší způsob, jak se intuitivně naučit regulární výraz.
Pro ladění na úrovni kódu vypíše re.DEBUG kompilovaný stavový stroj:
Cvičte
Ke každému napište regulární výraz. Řešení níže.
1. Extrahujte číslo verze z „Python 3.13.2 (hlavní, 15. ledna 2026, 10:32:11)“ – mělo by se vrátit „3.13.2“.
2. Rozdělte „jablko, banán; třešeň pomeranč“ na libovolný oddělovač (,, ; nebo mezeru).
3. Přepište foo.bar_baz-123 jako FOO.BAR_BAZ-123 (pouze velká písmena, ponechte číslice a interpunkci).
Řešení:
Regex je superschopnost, jakmile překročíte prvních 10 vzorů. Trik je v budování svalové paměti na pěti výše uvedených – pokrývají 90 % skutečné práce. Sáhněte po skutečném analyzátoru ve chvíli, kdy se přistihnete, že píšete zpětné reference do závorek rovnováhy.
Další krok: lekce regulárního výrazu + zpracování textu ve stopě automatizace — procvičte si protokolové soubory, data CSV a úlohy seškrabávání webu se skutečným Pythonem spuštěným ve vašem prohlížeči.