Pokud jste programátor, je pravděpodobné, že už víte, co jsou regulární výrazy (regulární výrazy). Regexové vzory byly implementovány téměř ve všech běžných programovacích jazycích, ale většina vývojářů stále nerozpoznává sílu a všestrannost těchto vzorů.
Tato příručka je o regulárních výrazech a o tom, jak je můžete používat v programovacím jazyce Python.
Co jsou regulární výrazy?
Regulární výrazy jsou vzory, které pomáhají uživateli porovnávat kombinace znaků v textových souborech a řetězcích. Regulární výrazy můžete použít k filtrování nebo vyhledání konkrétního vzoru ve výstupu příkazu nebo dokumentu.
Existují různé případy použití regulárních výrazů, nejznámější příkaz grep v Linuxu. Mezi další aplikace patří filtrování informací, například extrakce e-mailových adres a telefonních čísel z datového výpisu.
Hlavním důvodem, proč se mnoho vývojářů odkloní od regulárních výrazů, je nedostatečné povědomí o síle porovnávání vzorů. Někteří dokonce považují regulární výrazy za matoucí kvůli velkému množství znaků a sekvencí použitých ve vzorech.
Ať už je důvod jakýkoli, regulární výrazy jsou a budou jedním z nejdůležitějších aspektů programování, o kterém by měl každý vědět.
Regulární výrazy: Shodné znaky a sekvence
Regex je sám o sobě zcela nový jazyk. Modul regulárního výrazu interpretuje vzory složené z několika znaků vybavených konkrétními významy. Základní literály, jako jsou alfanumerické znaky, se shodují. Ale složité znaky, jako $, *, +, {atd. pomůcka při párování vyššího řádu.
- Hvězdička (*): Shoduje se s předchozím znakem nula nebo vícekrát. Doslovný význam znaku by byl „Element vynásobený nkrát“. Například pokud je regulární výraz abc *, odpovídající řetězce budou ab, abc, abcc, abccc, abcccc atd. Výraz [před naším letopočtem]* bude odpovídat bc, bcbc, bcbc atd.
- Plus (+): Shoduje se s předchozím znakem jednou nebo vícekrát. Fungování + znak je podobný *, ale + znak vynechá vzor, pokud se znak nevyskytuje. Například, abc + bude odpovídat abc, abcc, abccc atd. ale ne ab.
- Otazník (?): Shoduje se s předchozím znakem nula nebo jednou. Například vzor abc? bude odpovídat pouze ab a abc.
- Trubka (|): Používá se jako binární NEBO operátor. Odpovídá některému ze znaků předcházejících a následujících po kanálu. Například, a | b bude odpovídat buď a nebo b.
- Tečka (.): Odpovídá znaku, jehož identita není známa. Například, střídavý proud bude odpovídat aac, abc, acc, a2c atd.
- Mrkev (^): Odpovídá prvnímu znaku ve vzoru. Například, ^ Ra bude odpovídat slovům začínajícím na Ra například Rabbit, Raccoon a Random.
- Dolar ($): Odpovídá poslednímu znaku ve vzoru. Například, $ bude odpovídat slovům končícím na an jako Van, Dan a Plan.
- Pomlčka (-): Používá se k definování rozsahu znaků. Například, [0-9] bude odpovídat všem jednomístným číselným znakům.
Speciální sekvence používané ve vzorech regulárních výrazů jsou:
- \A: Vrátí shodu, pokud jsou následující znaky přítomny na začátku řetězce. Například, \ AT bude odpovídat slovům začínajícím na The jako The, Them, They atd.
- \ b: Vrátí shodu, pokud je znak nalezen na začátku nebo na konci slova. Například, \ bmad a šílený \ b bude odpovídat slovům jako vyrobeno a nomád resp.
- \ B: Vrátí shodu, pokud znak není nalezen na začátku nebo na konci slova.
- \ d: Odpovídá číselným znakům přítomným v řetězci. Například, /d* bude odpovídat číslům jako 1, 12, 1232 atd.
- \ D: Odpovídá nečíselným znakům v řetězci. / D bude odpovídat a, b, c, f atd.
- \ s: Shoduje se s mezerou v textu.
- \ S: Odpovídá znaku bez mezer v textu.
- \ w: Vrátí shodu, pokud řetězec obsahuje alfanumerické znaky včetně podtržítka. Například, \ w bude odpovídat a, b, c, d, 1, 2, 3 atd.
- \ W: Vrátí shodu, pokud řetězec neobsahuje alfanumerické znaky nebo podtržítka.
- \ Z: Odpovídá znakům na konci řetězce. Například, konec \ Z bude odpovídat slovům končícím na konec jako ohýbat, opravovat, udržovat atd.
Metody Pythonu pro regulární výrazy
V Pythonu re Knihovna poskytuje všechny nezbytné funkce a nástroje potřebné k implementaci regulárního výrazu ve vašich programech. Knihovnu nemusíte stahovat pomocí pipu, protože je předinstalován s interpretem Pythonu.
Chcete-li importovat re knihovny v Pythonu, přidejte do svého skriptu následující kód:
import re
Všimněte si, že při předávání regulárních výrazů v Pythonu používáme surové řetězce, protože neinterpretují speciální znaky, jako například \ n a \ t jinak.
Zápas()
The odveta() metoda v Pythonu vrací objekt regulárního výrazu, pokud program najde shodu na začátku zadaného řetězce. Tato funkce má dva základní argumenty:
re.match (vzor, řetězec)
...kde vzor je regulární výraz a tětiva je text, který je třeba prohledat.
Podívejte se na fragment kódu níže.
import re
match = re.match (r'Word ', "Tato věta obsahuje slovo")
tisk (shoda)
The r znak před řetězcem znamená nezpracovaný řetězec.
Výstup:
Žádný
Vrací se výše uvedený kód Žádný protože Slovo nebyl přítomen na začátku řetězce.
Pokud je nalezena shoda, můžete ji vytisknout pomocí skupina() metoda, která patří k objektu regulárního výrazu.
import re
match = re.match (r'Word ', "Word je těžko čitelný")
print (match.group (0))
Výstup:
Slovo
Vyhledávání()
The výzkum() metoda bere podobné argumenty jako re.match (). Zatímco match () vrací pouze shody přítomné na začátku řetězce, Vyhledávání() vrátí shody nalezené u libovolného indexu v řetězci.
import re
match = re.search (r'Word ', "Tato věta obsahuje slovo. Slovo se těžko čte. “)
print (match.group (0))
Všimněte si, že zápas() a Vyhledávání() metody vrátí pouze jednu shodu vzoru. Ve výše uvedeném kódu Slovo se objeví dvakrát. Ale Vyhledávání() funkce bude odpovídat pouze prvnímu výskytu slova.
Slovo
Najít vše ()
Jak již můžete uhodnout, findall () metoda vrací každou možnou shodu v řetězci.
import re
match = re.search (r'Word ', "Tato věta obsahuje slovo. Slovo se těžko čte. “)
pro elem v zápase:
tisk (elem)
Místo vrácení objektu regulárního výrazu vrátí funkce findall () seznam všech shod. Seznam můžete iterovat pomocí a pro smyčku v pythonu.
Rozdělit()
Pokud chcete rozdělit řetězec na dílčí řetězce pomocí vzoru jako oddělovače, pak rozdělit() funkce je ta, kterou potřebujete.
import re
split = re.split (r'and ', "Toto slovo a to a toto se liší.")
tisk (rozdělení)
Výstup:
['Toto slovo "," to "," toto je jiné. "]
Sub()
The sub() metoda umožňuje uživateli nahradit konkrétní slovo místo vzoru. Trvá následující argumenty.
re.sub (vzor, výměna, řetězec)
Zvažte tento fragment kódu:
import re
result = re.sub (r'and ',' or ', "Dave a Harry musí být potrestáni.")
tisk (výsledek)
Výstup:
Dave nebo Harry musí být potrestáni.
Kompilovat()
The re.compile () metoda v re Knihovna umožňuje uživateli uložit kompilovanou verzi vzoru regulárního výrazu do paměti. Poté může uživatel pomocí zkompilovaného objektu rychle filtrovat zadaný textový výpis pro odpovídající vzory.
import re
pattern = re.compile ('Python')
match = pattern.findall („Python je skvělý jazyk pro psaní skriptů. Python se snadno naučí. ")
tisk (shoda)
Tato funkce se primárně používá k ukládání vzorů, které jsou náročné na zdroje a ke spuštění potřebují spoustu času. Tento problém vyřeší kompilace a uložení vzoru jako objektu předem.
Využijte sílu regexu s Pythonem
Když pracujete s textovými soubory a výstupy, regex je skvělý nástroj, který máte k dispozici. Můžete rychle napsat nějaký kód pro filtrování nebo nahrazení konkrétních vzorů v dokumentu.
Zapamatovat si všechny postavy a odpovídající sekvence může být těžké, pokud právě začínáte s regexem. Chcete-li se zlepšit v regulárních výrazech, odkaz na seznam znaků, metod a sekvencí tu a tam vám z dlouhodobého hlediska určitě pomůže.
Použijte tento seznam regulárních výrazů Pythonu, abyste mohli lépe využívat tento univerzální programovací jazyk.
Přečtěte si další
- Programování
- Programování
- Krajta
Deepesh je Junior Editor pro Linux na MUO. Píše informační obsah na internetu již více než 3 roky. Ve volném čase rád píše, poslouchá hudbu a hraje na kytaru.
Přihlaste se k odběru našeho zpravodaje
Připojte se k našemu zpravodaji s technickými tipy, recenzemi, bezplatnými elektronickými knihami a exkluzivními nabídkami!
Ještě jeden krok…!
V e-mailu, který jsme vám právě poslali, potvrďte svou e-mailovou adresu.