Expresii regulate în Python

V-ați întrebat vreodată ce este cheia descoperire un anumit text într-un document sau asigurarea unui text se conformează la un anumit format, cum ar fi o adresă de e-mail, de exemplu, și alte operații similare?

Cheia pentru astfel de operațiuni este expresia regulată (regex). Să vedem câteva definiții pentru expresiile regulate. În Wikipedia, regexul este definit după cum urmează:

O secvență de caractere care definesc un model de căutare, în principal pentru a fi utilizate în potrivirea modelului cu șiruri de caractere sau potrivirea șirului, adică operațiuni de tipul "găsi și înlocui". Conceptul a apărut în anii 1950, când matematicianul american Stephen Kleene a formalizat descrierea unei limbi obișnuite și a intrat în uz comun cu utilitarele de procesare a textului Unix ed, editor și grep, un filtru.

O altă definiție frumoasă de la regular-expressions.info este:

O expresie regulată (regex sau regexp pe scurt) este un șir de text special pentru descrierea unui model de căutare. Vă puteți gândi la expresii regulate ca metacaractere cu steroizi. Probabil sunteți familiarizați cu notații wildcard, cum ar fi * .txt, pentru a găsi toate fișierele text dintr-un manager de fișiere. Echivalentul regex este. * \. Txt $

Știu că conceptul de expresii regulate poate părea un pic vag. Deci, să ne uităm la câteva exemple de regex pentru a înțelege mai bine conceptul.

Exemple de expresii regulate

În această secțiune, vă voi arăta câteva exemple de regex pentru a vă ajuta să înțelegeți în continuare conceptul.

Spuneți că ați avut această regexă:

/ Abder /

Aceasta este pur și simplu ne spune să potrivim cuvântul abder numai.

Ce zici de această regex?

/ A [nr] t /

Puteți citi acest regex după cum urmează: găsiți un model de text astfel încât prima literă să fie A și ultima literă este T, și între aceste scrisori vine și el n sau r. Deci, cuvintele potrivite sunt furnică și artă.

Permiteți-mi să vă dau un test mic în acest moment. Cum ați scrie o expresie regulată care începe cu CA, și se termină cu unul sau cu toate caracterele următoare TBR? Da, acest regex poate fi scris astfel:

/ Cca [tbr] /

Dacă vedeți un regex care începe cu accent circumflex ^, aceasta înseamnă potrivirea șirului care începe cu șirul menționat mai jos ^. Deci, dacă ai regexul de mai jos, se potrivește cu șirul care începe cu Acest.

/ ^ Această /

Astfel, în următorul șir:

Numele meu este Abder Acesta este Abder Acesta este Tom

Bazat pe regex / ^ Această /, următoarele șiruri vor fi potrivite:

Acesta este Abder Acesta este Tom

Dacă am fi vrut să potrivim un șir cu asta capete cu ceva șir? În acest caz, folosim semnul dolarului $. Iată un exemplu:

Abder $

Astfel, în șirul de mai sus (cele trei linii), următoarele modele ar fi potrivite folosind această regex:

Numele meu este Abder Acesta este Abder

Ei bine, ce părere aveți despre acest regex?

^ [A-Z] [a-z]

Știu că ar putea părea complex la prima vedere, dar să trecem prin ea cu bucăți.

Am văzut deja un accent circumflex ^ este. Înseamnă să potriviți un șir care începe cu un șir. [A-Z] se referă la literele mari. Deci, dacă citim această parte a regelui: ^ [A-Z], ne spune să potrivim șirul care începe cu o literă majusculă. Ultima parte, [A-z], înseamnă că după găsirea unui șir care începe cu o literă mare, ar fi urmat de litere mici din alfabet.

Deci, care din urmatoarele siruri de caractere vor fi potrivite folosind acest regex? Dacă nu sunteți sigur, puteți utiliza Python, așa cum vom vedea în secțiunea următoare pentru a testa răspunsul.

abder Abder ABDER Abder

Expresiile regulate sunt un subiect foarte larg, iar aceste exemple sunt doar pentru a vă oferi o simțire a ceea ce sunt și de ce le folosim. 

O referință plăcută pentru a afla mai multe despre expresiile regulate și a vedea mai multe exemple este RexEgg.

Expresii regulate în Python

Să vină acum la partea distractivă. Vrem să vedem cum să lucrăm cu unele dintre expresiile regulate de mai sus în Python. Modulul pe care îl vom folosi pentru a lucra cu expresii regulate în Python este re modul.

Primul exemplu a fost despre găsirea cuvântului abder. În Python, am face acest lucru după cum urmează:

import re text = 'Numele meu este Abder' match_pattern = re.match (r'Abder ', text) print match_pattern

Dacă executați scriptul Python de mai sus, veți obține ieșirea: Nici unul!

Scriptul funcționează foarte bine, dar problema este cu modul în care funcționează Meci() lucrări. Dacă ne întoarcem la re modulul de documentare, aceasta este ceea ce funcția Meci() face:

Dacă zero sau mai multe caractere de la începutul șirului corespund modelului expresiei obișnuite, returnați un obiect de potrivire corespunzător. Returnați Niciunul dacă șirul nu se potrivește cu modelul; rețineți că aceasta este diferită de o potrivire cu lungimea zero.

Aha, din asta vedem asta Meci() va întoarce un rezultat numai dacă a găsit o potrivire la început a șirului.

Putem folosi funcția căutare(), care este, pe baza documentației:

Scanați prin șir căutând prima locație unde modelul de expresie obișnuită produce o potrivire și returnați un obiect de potrivire corespunzător. Returnați niciunul dacă nici o poziție în șir nu se potrivește cu modelul; rețineți că aceasta este diferită de găsirea unei potriviri de lungime zero la un moment dat în șir.

Deci, dacă scriem scriptul de mai sus, dar cu căutare() in loc de Meci(), obținem următoarea ieșire:

<_sre.SRE_Match object at 0x101cfc988>

Asta este, a obiect de potrivire a fost returnat.

Dacă vrem să returnăm rezultatul (șir de potrivire), vom folosi grup() funcţie. Dacă vrem să vedem întregul meci, îl folosim grupa (0). Prin urmare:

tipăriți match_pattern.group (0)

va reveni la ieșire: Abder.

Dacă luăm al doilea regex în secțiunea anterioară, adică / A [nr] t /, acesta poate fi scris în Python după cum urmează:

import re text = 'Aceasta este o furnica neagra' match_pattern = re.search (r'a [nr] t ', text) print match_pattern.group (0)

Rezultatul pentru acest script este: furnică.

Concluzie

Articolul devine mai lung, iar subiectul expresiilor regulate în Python ia cu siguranță mai mult de un articol, dacă nu o carte de la sine. 

Acest articol, totuși, este de a vă da un început rapid și încredere pentru a intra în lumea expresiilor regulate în Python. Puteți să vă referiți la re documentație pentru a afla mai multe despre acest modul și despre cum să ajungeți mai profund în acest subiect.

Cod