Stručný průvodce regulárními výrazy

pro G Suite a Office 360 uživatelé a pro vývojáře Pythonu

(Badi James) (20. května 2020)

Při extrakci statistik se s jazykem pracuje jen zřídka. Dokonce i úkol najít a spočítat, kolikrát se slovo objeví v textu, úkol, který na první pohled vypadá, jako by to mělo být jednoduché s moderními textovými procesory a kódovacími knihovnami, může rychle narazit na komplikace.

Vezměte si příklad pokusu zjistit, zda je obloha uvedena v textu. Jednoduchý přístup by byl jen:

  • Ctrl + F „sky“ (pokud používáte textový editor nebo textový procesor)
  • „sky“ v body\_of\_text (pokud píšete skript v pythonu)

Oba přístupy však ne vždy najdou zmínky o obloze a někdy přinesou falešná pozitiva. Omezení těchto přístupů vycházejí z toho, jak hledají přesnou posloupnost znaků s-k-y. Níže jsou uvedeny některé funkce jazyka, které způsobí selhání tohoto přístupu:

  • Velká písmena: Pokud věta začíná řetězcem „Sky“ nebo „Sky“ se objeví jako součást vlastního podstatného jména (nebo pokud autor textu měl zlomenou klávesu Caps Lock) tyto podoby slova nebudou nalezeny.
  • Hláskování dalších slov: Přítomnost slov jako „pe sky ”,“ ri sky „atd. způsobí „Nebe“, které má být falešně detekováno.
  • Množné číslo: „Nebe“ bude nezjištěno.

Mnoho textových editorů a textových editorů má ve svém „Najít a Nahradit ”funkce pro řešení prvních dvou výše uvedených problémů. Ve skutečnosti jsou obvykle ve výchozím nastavení zapnuty možnosti jako „Ignorovat velká písmena“ a „Porovnat celé slovo“. Problém chybějících alternativních forem slova (množné číslo, čas, pohlaví atd.) Nebo alternativních hláskování (například mnoho variant jména Mohammad) však bude stále existovat.

S Pythonem byste se mohli rozšířit řádek vyhledávací\_fráze v řádku body\_of\_text kódu přidáním podmínek, které pokryjí všechny varianty slova a vyloučí falešně pozitivní shody. Může to ale být obtížné a váš kód pro tento údajně jednoduchý úkol bude dlouhý a obtížně udržovatelný.

Zadejte regulární výrazy

Regulární výrazy (nebo zkráceně regulární výraz) jsou výkonné nástroje pro hledání vzorů znaků uvnitř textu. Myšlenkou je, že místo toho, abyste svému kódu nebo textovému procesoru poskytli konkrétní posloupnost znaků, které chcete najít, dáte mu vzor (regulární výraz), který popisuje pravidla, která byste chtěli použít k rozšíření nebo omezení, které segmenty textu se shodují daný vzor.

Specifikace těchto pravidel je dosaženo přidáním speciálních znaků do regulárního výrazu. Vezměte si výše uvedený příklad „nebe“. Regulární výraz „\ bsk (y | y) \ b“ bude odpovídat „obloze“ i „nebi“, ale nebude odpovídat výrazům „otravný“, „riskantní“ ani žádnému jinému slovu obsahujícímu s-k-y. Pojďme si rozdělit účel každého ze speciálních znaků, které jsme přidali:

„ \ b “ohraničující každý konec našeho výrazu určuje hranice slov, tj. mezery, interpunkci, začátek nebo konec textu atd. To brání tomu, aby regex odpovídal jiným slova, kde „nebe“ tvoří součást pravopisu (například „otravné“ nebo „Skype“).

Závorky vytvářejí skupinu zachycení. Používá se k určení, na kterou část regulárního výrazu chcete použít konkrétní pravidlo. V rámci této skupiny zachycení máme znak „|“ (aka svislá čára). Funguje jako operátor OR a určuje, že buď výraz vlevo („y“), nebo výraz vpravo („ies“) může být součástí shody. To umožňuje našemu regulárnímu výrazu, aby odpovídal jak singulárnímu „nebi“, tak i množnému číslu „nebe“.

Pro řešení problému kapitalizace obvykle nejde o problém, protože možnost „Ignorovat případ“ v Najít funkce ve většině textových procesorů a textových editorů lze také použít při vyhledávání pomocí regexu. Při použití pythonovské regexové knihovny re, th e IGNORECASE lze použít příznak při vyhledávání pomocí regexu (více o tom později). Bez této možnosti nebo tohoto příznaku však můžeme spojit „Sky“, „sky“, „Skies“ a „skies“ rozšířením našeho regulárního výrazu jako takového: „\ b (S | s) k (y | ies) \ b“

Jak vidíte, díky regulárním výrazům bylo naše hledání oblohy mnohem plodnější! Byl to však relativně jednoduchý příklad toho, co regex dokáže. Níže je uvedeno několik dalších příkladů, které demonstrují sílu a univerzálnost regulárních výrazů:

  • M (u | o) hamm? (E | a) (d | t) odpovídá nejvíce pravopisné variace kávy Mohammad
  • (? Mountain) Bike odpovídá Bike ale ne Mountain Bike
  • (?! datum) odpovídá kávě , ale ne datum kávy
  • (https: \ / \ /)? (www \.)? [a- z0–9] + \. [az] + (\. [az] +)? odpovídá mnoha adresám URL
  • [a-zA-Z0–9 -\_.] + @ [a-zA-Z] + \. [a-zA-Z] + ( \. [a-zA-Z] +)? odpovídá mnoha e-mailovým adresám

regexr.com: skvělý web pro učení regexu

Výše ​​popsané příklady vás možná přiměly přemýšlet „to vypadá užitečně, ale jak si zapamatuji všechny různé speciální postavy a co dělají? A jak mohu zjistit, zda můj regulární výraz funguje tak, jak bylo zamýšleno? “. Nedělejte si starosti, regexr.com je tu, aby vám pomohl.

Na tomto webu můžete vytvářet regulární výrazy pomocí dodaných cheat listů jako průvodci a vložte nějaký text, abyste je vyzkoušeli. Jakékoli shody budou v textu zvýrazněny a bude zobrazen počet shod. Váš regulární výraz je barevně odlišen a užitečné tipy k nástrojům popisují, co jednotlivé postavy dělají, když na ně umístíte ukazatel myši. To je skvělé pro učení regexu pomocí regexu.

Použití Regexu v Dokumentech Google a Tabulkách Google

Používání Regexu v těchto aplikacích G Suite je jednoduché a uživatelsky přívětivé. Jednoduše stiskněte Ctrl + F a poté klikněte na tři svislé tečky ve vyhledávacím poli, které se zobrazí v levém horním rohu prohlížeče. Případně přejděte v rozbalovacích nabídkách na Upravit -> Najít a nahradit . Tím se otevře okno Najít a nahradit. Zde najdete zaškrtávací políčko Shoda pomocí regulárních výrazů (Dokumenty) nebo Hledat pomocí regulárních výrazů (Tabulky). Po výběru můžete svůj regulární výraz vložit do pole Najít . Veškeré shody budou ve vašem dokumentu zvýrazněny a počet shod se zobrazí v poli Najít . Stále můžete použít další dostupné možnosti Najít a nahradit, například Rozlišovat velikost písmen, a váš regulární výraz se bude chovat odpovídajícím způsobem.

Používání „Regex“ (zástupné znaky) v MS Word a Excel

Word a Excel bohužel nepodporují regulární výrazy. Umožňují však „zástupné znaky“, které se chovají podobně, i když se použité symboly někdy liší.

V aplikaci Word lze vyhledávání pomocí zástupných znaků dosáhnout pomocí funkce Rozšířené hledání a nahrazení. Podrobnosti o tom, jak přejít na tuto funkci, jak povolit zástupné znaky a co jednotlivé zástupné znaky dělají, najdete v této příručce uvedené na webu podpory Office.

V aplikaci Excel není okamžitě zřejmé, jak vyhledávat pomocí zástupných znaků, protože není součástí žádné funkce vyhledávání. Můžete však najít buňky odpovídající vyhledávací frázi obsahující zástupné znaky pomocí filtrování listů pomocí Pokročilých filtrů. Postupujte podle této příručky z webových stránek podpory Office, kde najdete, jak používat zástupné znaky jako součást svých pokročilých filtrů v části „Zástupná kritéria“.

Kde získat přístup k pokročilým filtrům v aplikaci Excel, které umožňují použití zástupných znaků

Použití regexu v Pythonu

re je poskytována jako součást základní instalace Pythonu. Tato knihovna poskytuje mnoho funkcí, které vám umožňují analyzovat a manipulovat s řetězci pomocí regulárních výrazů.

Několik klíčových funkcí je:

  • re.search ( pattern, string, flags = 0 ) : Vyhledá první umístění v řetězci , kde odpovídá vzor (váš regulární výraz), vrací objekt shody popisující shodu nebo Žádná, pokud nebyla nalezena shoda.
  • re.match ( vzor , string, flags = 0 ) : Chová se stejně jako re.search (), kromě toho, že vyhledává pouze shody, které začínají na začátku string
  • re.split ( pattern, string, flags = 0 ): Rozdělí řetězec do seznamu podle shody s pattern , jako metoda str.split (), ale s regexem.
  • re.sub ( pattern, repl, string, count = 0, flags = 0 ): Nahraďte výskyty vzoru v řetězci za repl, pokud repl je řetězec, nebo za výstup repl if repl is a function that takes a single match object as an argument

Parametr flags umožňuje můžete určit příznaky jako re.IGNORECASE , které odpovídajícím způsobem upraví chování vašich vzorů regulárního výrazu.

Když píšete své vzory regulárních výrazů jako řetězce v pythonu, je užitečné použít nezpracované řetězce, protože vám umožňují používat speciální znaky, například „\“, aniž byste jim museli uniknout. Například místo:

  • pattern = “\\ bsk (y | ies) \\ b”

Použijte:

  • pattern = r ”\ bsk (y | ies) \ b”
Příklad z dokumentace re zobrazující použití regexu s pozitivním vzhledem

Úplná dokumentace pro re naleznete zde: https://docs.python.org/3/library/re.html # module-re

Happy Matching !!

Jak vidíte, regulární výrazy mohou při práci s textem mnohem usnadnit tolik úkolů. Dokonce i učení pouze několika speciálních znaků může umožnit tolik nových využití nástrojů Najít a nahradit. Mnoho textových editorů a textových editorů uznalo jejich užitečnost a umožnilo podporu regulárních výrazů nebo implementovalo své vlastní funkce, které poskytují podobné funkce. Znalost regulárních výrazů je užitečným nástrojem v sadě nástrojů pro každého spisovatele, vývojáře softwaru nebo kohokoli, kdo často analyzuje text.

AI Palette pomáhá společnostem FMCG s jejich inovací produktů. Používáme umělou inteligenci & Machine Learning, abychom společnostem FMCG pomohli vytvářet produkty, které zvítězí pro spotřebitele.