Dokumentácia pre modul Re pre Python 3 v . Modul Re pre regulárne výrazy

Regulárne výrazy sú veľmi populárnou súčasťou takmer každého programovacieho jazyka. Pomáhajú vám rýchlo získať informácie, ktoré potrebujete. Používajú sa najmä vtedy, keď je potrebné spracovať text. Python sa štandardne dodáva so špeciálnym modulom. re, ktorá je zodpovedná za prácu s regulárnymi výrazmi.

Dnes budeme hovoriť podrobne o tom, čo to je vo všeobecnosti, ako s nimi pracovať a ako modul re pomôže.

Regulárne výrazy: úvod

Aké sú použitie regulárnych výrazov? Takmer všetky. Napríklad tieto:

  1. Webové aplikácie, ktoré vyžadujú overenie textu. Typickým príkladom sú online poštoví klienti.
  2. Akékoľvek iné projekty týkajúce sa textov, databáz a pod.

Skôr ako začneme analyzovať syntax, mali by sme podrobnejšie pochopiť základné princípy fungovania knižnice re a vo všeobecnosti, čo je na tom všeobecne dobré. Uvedieme aj príklady z reálnej praxe, kde si popíšeme mechanizmus ich použitia. Môžete si vytvoriť takúto šablónu, ktorá je vhodná na vykonávanie širokej škály operácií s textom.

Čo je šablóna v knižnici Re?

Pomocou neho môžete vyhľadávať informácie rôznych typov, získavať im zodpovedajúce informácie, aby sa ostatné funkcie prispôsobili. A, samozrejme, tieto údaje spracovať.

Vezmite napríklad nasledujúcu šablónu: s+. Znamená ľubovoľný priestorový znak. Ak k nemu pridáte znamienko plus, znamená to, že vzor obsahuje viac ako jednu medzeru. Môže dokonca zodpovedať znakom karty, ktoré sa volajú s t+.

Pred ich použitím je potrebné importovať knižnicu Re. Potom použijeme špeciálny príkaz na zostavenie šablóny. Toto sa vykonáva v dvoch krokoch.

>>> import re

>>> regulárny výraz = re.compile('s+')

Tento kód konkrétne vykonáva operáciu kompilácie šablóny, ktorú možno použiť. napríklad na vyhľadávanie medzier (jedného alebo viacerých).

Získavanie samostatných informácií z rôznych reťazcov pomocou regulárnych výrazov

Predpokladajme, že máme premennú obsahujúcu nasledujúce informácie.

>>> text = “””100 INF Informatika

213 MAT Matematika  

156 SLOVENSKY »»»

Obsahuje tri vzdelávacie kurzy. Každá z nich sa skladá z troch častí – čísla, kódu a názvu. Vidíme, že interval medzi týmito slovami je iný. Čo robiť, aby ste tento riadok rozdelili na samostatné čísla a slová? Na dosiahnutie tohto cieľa existujú dva spôsoby:

  1. zavolať funkciu re.rozdeliť.
  2. aplikovať funkciu rozdeliť pre regex.

Tu je príklad použitia syntaxe každej z metód pre našu premennú.

>>> re.split('s+', text)  

# alebo

>>> regex.split(text)

Výstup: ['100', 'INF', 'Computer Science', '213', 'MAT', 'Math', '156', 'ENG', 'English']

Vo všeobecnosti možno použiť oba spôsoby. V skutočnosti je však oveľa jednoduchšie použiť regulárny výraz namiesto viacnásobného použitia funkcie. re.rozdeliť.

Hľadanie zhôd s tromi funkciami

Povedzme, že z reťazca potrebujeme extrahovať iba čísla. Čo je pre to potrebné urobiť?

re.findall()

Tu je príklad použitia funkcie findall(), ktorý spolu s regulárnymi výrazmi umožňuje extrahovať výskyty jedného alebo viacerých čísel z textovej premennej.

>>> vytlačiť (text)  

100 INF Informatika

213 MAT Matematika  

156 SLOV Angličtina

>>> regex_num = re.compile('d+')  

>>> regex_num.findall(text)  

['100', '213', '156']

Spolu so symbolom d sme použili šablónu, ktorá označuje absolútne akúkoľvek číselnú hodnotu umiestnenú v premennej alebo texte. A keďže sme tam pridali jedno +, znamená to, že musí byť prítomné aspoň jedno číslo. 

Môžete tiež použiť znak * na určenie, že na nájdenie zhody sa nevyžaduje prítomnosť číslice.

Ale v našom prípade, keďže sme použili +, extrahovali sme s findall() 1 alebo viac digitálnych označení kurzov z textu. V našom prípade teda regulárne výrazy fungujú ako nastavenia funkcie.

re.search() vs re.match()

Ako už z názvu funkcií tušíte, prvá hľadá zhodu v texte. Otázka: Aký je rozdiel medzi nájsť všetko? Ide o to, že vráti konkrétny objekt, ktorý sa zhoduje so vzorom, a nie celú sekvenciu nájdených výsledkov vo forme zoznamu, ako predchádzajúca funkcia.

Na druhej strane, funkcia re.match robí to isté. Len syntax je iná. Šablóna musí byť umiestnená na začiatku. 

Zoberme si príklad, ktorý to demonštruje.

>>> # vytvorte premennú s textom

>>> text2 = «»»INF Informatika

213 MAT Matematika 156″»»  

>>> # kompilovať regulárny výraz a hľadať vzory

>>> regex_num = re.compile('d+')  

>>> s = regex_num.search(text2)  

>>> print('Prvý index: ', s.start())  

>>> print('Posledný index: ', s.end())  

>>> print(text2[s.start():s.end()]) 

Prvý index: 17 

Posledný index: 20

213

Ak chcete získať podobný výsledok iným spôsobom, môžete použiť funkciu skupina().

Nahradenie časti textu knižnicou Re

Ak chcete nahradiť text, použite funkciu re.sub(). Predpokladajme, že sa náš zoznam kurzov trochu zmenil. Vidíme, že po každej digitálnej hodnote máme tab. Našou úlohou je spojiť celú túto postupnosť do jedného riadku. Aby sme to dosiahli, musíme nahradiť výraz s+ prejsť 

Pôvodný text bol:

# vytvorte premennú s textom

>>> text = “””100 INF t Informatika

213 MAT t Matematika  

156 SK t anglicky»»»  

>>> vytlačiť (text)  

100 INFO Informatika

213 XNUMX XNUMX MAT Matematika  

156 ENG Angličtina

Na vykonanie požadovanej operácie sme použili nasledujúce riadky kódu.

# nahraďte jednu alebo viac medzier 1

>>> regulárny výraz = re.compile('s+')  

>>> print(regex.sub(' ', text))  

V dôsledku toho máme jeden riadok. 

101 COM Počítače 205 MAT Matematika 189 SLOV Angl

Teraz zvážte ďalší problém. Nestojíme pred úlohou dávať priestory. Pre nás je oveľa dôležitejšie, aby všetky názvy kurzov začínali na novom riadku. Na tento účel sa používa iný výraz, ktorý k výnimke pridá nový riadok. Čo je to za výraz?

knižnica Re podporuje funkciu, ako je negatívna zhoda. Od priameho sa líši tým, že pred lomkou obsahuje výkričník. To znamená, že ak potrebujeme preskočiť znak nového riadku, potom musíme namiesto n napísať !n.

Dostaneme nasledujúci kód.

# odstráňte všetky medzery okrem nového riadku  

>>> regulárny výraz = re.compile('((?!n)s+)')  

>>> print(regex.sub(' ', text))  

100 INF Informatika

213 MAT Matematika  

156 SLOV Angličtina

Čo sú to skupiny regulárnych výrazov?

Pomocou skupín regulárnych výrazov môžeme získať požadované objekty vo forme samostatných prvkov, a nie v jednom riadku. 

Predpokladajme, že potrebujeme získať číslo kurzu, kód a názov nie v jednom riadku, ale ako samostatné prvky. Na dokončenie úlohy budete musieť napísať obrovské množstvo nepotrebných riadkov kódu. 

V skutočnosti môže byť úloha značne zjednodušená. Môžete zostaviť šablónu pre všetky položky a zadať len údaje, ktoré potrebujete získať zo zátvoriek.

Bude veľmi malý počet riadkov. 

# vytvorte skupiny šablón textu kurzu a extrahujte ich

>>> vzorec_kurzu = '([0-9]+)s*([A-ZY]{3})s*([a-zA-ZoY]{4,})'  

>>> re.findall(vzor_kurzu, text)  

[('100', 'INF', 'Computer Science'), ('213', 'MAT', 'Math'), ('156', 'ENG', 'English')]

Koncept „nenásytného“ párovania

Štandardne sú regulárne výrazy naprogramované tak, aby extrahovali maximálne množstvo zodpovedajúcich údajov. A to aj v prípade, že potrebujete oveľa menej.

Pozrime sa na vzorový HTML kód, kde potrebujeme značku získať.

>>> text = “Príklad zhody chamtivých regulárnych výrazov”  

>>> re.findall('', text)  

['Príklad zhody chamtivých regulárnych výrazov']

Namiesto extrahovania iba jednej značky Python získal celý reťazec. Preto sa tomu hovorí chamtivý.

A čo robiť, aby ste získali iba značku? V tomto prípade musíte použiť lenivé párovanie. Na určenie takéhoto výrazu sa na koniec vzoru pridá otáznik.

Získate nasledujúci kód a výstup tlmočníka.

>>> re.findall('', text)  

[, ”]

Ak je potrebné získať iba prvý výskyt, potom sa použije metóda Vyhľadávanie ().

re.search('', text).group()  

"

Potom sa nájde iba úvodná značka.

Šablóny populárnych výrazov

Tu je tabuľka obsahujúca najčastejšie používané vzory regulárnych výrazov.

Dokumentácia pre modul Re pre Python 3 v . Modul Re pre regulárne výrazy

záver

Uvažovali sme len o najzákladnejších metódach práce s regulárnymi výrazmi. V každom prípade ste videli, aké sú dôležité. A tu nezáleží na tom, či je potrebné analyzovať celý text alebo jeho jednotlivé časti, či je potrebné analyzovať príspevok na sociálnej sieti alebo zbierať údaje, aby ste ich mohli neskôr spracovať. Spoľahlivým pomocníkom v tejto veci sú regulárne výrazy.

Umožňujú vám vykonávať úlohy, ako napríklad:

  1. Určenie formátu údajov, ako je e-mailová adresa alebo telefónne číslo.
  2. Získanie šnúrky a jej rozdelenie na niekoľko menších šnúrok.
  3. Vykonávajte rôzne operácie s textom, ako je vyhľadávanie, extrahovanie potrebných informácií alebo nahradenie časti znakov.

Regulárne výrazy tiež umožňujú vykonávať netriviálne operácie. Na prvý pohľad zvládnuť túto vedu nie je jednoduché. Ale v praxi je všetko štandardizované, takže na to stačí prísť raz, potom sa tento nástroj dá použiť nielen v Pythone, ale aj v akomkoľvek inom programovacom jazyku. Dokonca aj Excel používa regulárne výrazy na automatizáciu spracovania údajov. Je teda hriech tento nástroj nevyužiť.

Nechaj odpoveď