Documentația pentru modulul Re pentru Python 3 în . Re modulul pentru expresii regulate

Expresiile regulate sunt o componentă foarte populară a aproape oricărui limbaj de programare. Ele vă ajută să accesați rapid informațiile de care aveți nevoie. În special, ele sunt utilizate atunci când este necesară procesarea textului. Python vine implicit cu un modul special. re, care este responsabil pentru lucrul cu expresii regulate.

Astăzi vom vorbi în detaliu despre ce este în general, cum să lucrați cu ei și cum este modulul re va ajuta.

Expresii regulate: o introducere

Care sunt întrebuințările expresiilor regulate? Aproape tot. De exemplu, acestea:

  1. Aplicații web care necesită validare text. Un exemplu tipic este clienții de poștă online.
  2. Orice alte proiecte legate de texte, baze de date și așa mai departe.

Înainte de a începe să analizăm sintaxa, ar trebui să înțelegem mai detaliat principiile de bază ale funcționării bibliotecii re și, în general, ce este în general bun la ea. Vom da și exemple din practica reală, unde vom descrie mecanismul utilizării lor. Puteți crea un astfel de șablon, potrivit pentru a efectua o mare varietate de operațiuni cu text.

Ce este un șablon în biblioteca Re?

Cu acesta, puteți căuta informații de diferite tipuri, puteți obține informații corespunzătoare acestora, pentru a face alte funcții mai adaptabile. Și, desigur, să procesăm aceste date.

De exemplu, luați următorul șablon: s+. Înseamnă orice caracter de spațiu. Dacă îi adăugați un semn plus, atunci aceasta înseamnă că modelul include mai mult de un spațiu. Se poate potrivi chiar și caracterele de tabulatură cu care sunt apelate t+.

Înainte de a le folosi, trebuie să importați biblioteca Re. După aceea, folosim o comandă specială pentru a compila șablonul. Acest lucru se face în doi pași.

>>> import re

>>> regex = re.compile('s+')

Mai exact, acest cod realizează operația de compilare a unui șablon care poate fi utilizat. de exemplu, pentru a căuta spații (unul sau mai multe).

Obținerea de informații separate din șiruri de caractere diferite folosind expresii regulate

Să presupunem că avem o variabilă care conține următoarele informații.

>>> text = „””100 INF Informatică

213 MAT Matematică  

156 ENG engleză»»»

Conține trei cursuri de formare. Fiecare dintre ele constă din trei părți - număr, cod și nume. Vedem că intervalul dintre aceste cuvinte este diferit. Ce trebuie să faceți pentru a împărți această linie în numere și cuvinte separate? Există două metode pentru a atinge acest obiectiv:

  1. apelează o funcție re.despicat.
  2. aplica functia împărţi pentru regex.

Iată un exemplu de utilizare a sintaxei fiecărei metode pentru variabila noastră.

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

# sau

>>> regex.split(text)

Ieșire: ['100', 'INF', 'Computer Science', '213', 'MAT', 'Math', '156', 'ENG', 'English']

În general, ambele metode pot fi utilizate. Dar, de fapt, este mult mai ușor să folosești o expresie regulată în loc să folosești funcția de mai multe ori. re.despicat.

Găsirea potrivirilor cu trei funcții

Să presupunem că trebuie să extragem doar numere dintr-un șir. Ce trebuie făcut pentru asta?

re.findall()

Iată un caz de utilizare al funcției Găsiți toate(), care, împreună cu expresiile regulate, vă permite să extrageți aparițiile unuia sau mai multor numere dintr-o variabilă text.

>>> print(text)  

100 INF Informatică

213 MAT Matematică  

156 ENG engleză

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

>>> regex_num.findall(text)  

[„100”, „213”, „156”]

Împreună cu simbolul d, am folosit un șablon care indică absolut orice valoare numerică situată într-o variabilă sau text. Și din moment ce am adăugat unul + acolo, asta înseamnă că cel puțin un număr trebuie să fie prezent. 

De asemenea, puteți utiliza semnul * pentru a specifica că prezența unei cifre nu este necesară pentru a putea fi găsită o potrivire.

Dar în cazul nostru, din moment ce am folosit +, am extras cu Găsiți toate() 1 sau mai multe denumiri digitale ale cursurilor din text. Astfel, în cazul nostru, expresiile regulate acționează ca setări pentru funcție.

cercetare() vs re.match()

După cum puteți ghici din numele funcțiilor, primul caută o potrivire în text. Întrebare: Care este diferența dintre Găsiți toate? Ideea este că returnează un obiect specific care se potrivește cu modelul, și nu întreaga secvență de rezultate găsite sub forma unei liste, ca și funcția anterioară.

La rândul său, funcția re.match face același lucru. Doar sintaxa este diferită. Șablonul trebuie plasat la început. 

Să luăm un exemplu care demonstrează acest lucru.

>>> # creați o variabilă cu text

>>> text2 = «»»INF Informatică

213 MAT Matematică 156″»»  

>>> # compilați regex și căutați modele

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

>>> s = regex_num.search(text2)  

>>> print('Primul index: ', s.start())  

>>> print('Ultimul index: ', s.end())  

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

Primul indice: 17 

Ultimul indice: 20

213

Dacă doriți să obțineți un rezultat similar într-un mod diferit, puteți utiliza funcția grup().

Înlocuirea unei părți a textului cu biblioteca Re

Pentru a înlocui text, utilizați funcția re.sub(). Să presupunem că lista noastră de cursuri s-a schimbat puțin. Vedem că după fiecare valoare digitală avem o filă. Sarcina noastră este să combinăm toată această secvență într-o singură linie. Pentru a face acest lucru, trebuie să înlocuim expresia s+ a trece 

Textul original a fost:

# creați o variabilă cu text

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

213 MAT t Matematică  

156 ENG t engleză»»»  

>>> print(text)  

100 INFO Informatică

213 MAT Matematică  

156 ENG Engleză

Pentru a efectua operația dorită, am folosit următoarele linii de cod.

# înlocuiți unul sau mai multe spații cu 1

>>> regex = re.compile('s+')  

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

Ca rezultat, avem o singură linie. 

101 Calculatoare COM 205 MAT Matematică 189 ENG Engleză

Acum luați în considerare o altă problemă. Nu ne confruntăm cu sarcina de a pune spații. Este mult mai important pentru noi ca toate numele cursurilor să înceapă pe o linie nouă. Pentru a face acest lucru, se folosește o altă expresie care adaugă o linie nouă la excepție. Ce fel de expresie este aceasta?

Bibliotecă Re acceptă o caracteristică precum potrivirea negativă. Diferă de cel direct prin faptul că conține un semn de exclamare înainte de bară oblică. Adică, dacă trebuie să sărim caracterul nou linie, atunci trebuie să scriem !n în loc de n.

Obținem următorul cod.

# eliminați toate spațiile, cu excepția liniei noi  

>>> regex = re.compile('((?!n)s+)')  

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

100 INF Informatică

213 MAT Matematică  

156 ENG engleză

Ce sunt grupurile de expresii regulate?

Cu ajutorul unor grupuri de expresii regulate, putem obține obiectele dorite sub formă de elemente separate, și nu într-o singură linie. 

Să presupunem că trebuie să obținem numărul cursului, codul și numele nu într-o singură linie, ci ca elemente separate. Pentru a finaliza sarcina, va trebui să scrieți un număr mare de linii de cod inutile. 

De fapt, sarcina poate fi mult simplificată. Puteți compila șablonul pentru toate intrările și doar să specificați datele pe care trebuie să le obțineți din paranteze.

Va fi un număr foarte mic de linii. 

# creați grupuri de șabloane de text de curs și extrageți-le

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

>>> re.findall(model_curs, text)  

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

Conceptul de potrivire „lacomă”.

În mod standard, expresiile regulate sunt programate pentru a extrage cantitatea maximă de date potrivite. Și chiar dacă aveți nevoie de mult mai puțin.

Să ne uităm la un exemplu de cod HTML de unde trebuie să obținem eticheta.

>>> text = „Exemplu de potrivire greedy a expresiilor regulate”  

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

[„Exemplu de potrivire greedy a expresiilor regulate”]

În loc să extragă doar o etichetă, Python a primit întregul șir. De aceea se numește lacom.

Și ce să faci pentru a obține doar eticheta? În acest caz, trebuie să utilizați potrivirea leneșă. Pentru a specifica o astfel de expresie, se adaugă un semn de întrebare la sfârșitul modelului.

Veți obține următorul cod și rezultatul interpretului.

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

[”, ”]

Dacă este necesar să obțineți doar prima apariție întâlnită, atunci metoda este utilizată căutare ().

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

Matei 22:21

Apoi va fi găsită doar eticheta de deschidere.

Șabloane de expresie populare

Iată un tabel care conține cele mai frecvent utilizate modele de expresie regulată.

Documentația pentru modulul Re pentru Python 3 în . Re modulul pentru expresii regulate

Concluzie

Am luat în considerare doar cele mai de bază metode de lucru cu expresii regulate. În orice caz, ați văzut cât de importante sunt. Și aici nu are nicio diferență dacă este necesar să analizați întregul text sau fragmentele sale individuale, dacă este necesar să analizați o postare pe o rețea de socializare sau să colectați date pentru a o procesa ulterior. Expresiile regulate sunt un ajutor de încredere în această problemă.

Acestea vă permit să efectuați sarcini precum:

  1. Specificarea formatului datelor, cum ar fi o adresă de e-mail sau un număr de telefon.
  2. Obținerea unui șir și împărțirea lui în mai multe șiruri mai mici.
  3. Efectuați diverse operații cu text, cum ar fi căutarea, extragerea informațiilor necesare sau înlocuirea unei părți din caractere.

Expresiile regulate vă permit, de asemenea, să efectuați operații non-triviale. La prima vedere, stăpânirea acestei științe nu este ușoară. Dar, în practică, totul este standardizat, așa că este suficient să-l dai seama o dată, după care acest instrument poate fi folosit nu numai în Python, ci și în orice alt limbaj de programare. Chiar și Excel folosește expresii regulate pentru a automatiza procesarea datelor. Deci este un păcat să nu folosești acest instrument.

Lasă un comentariu