Expresii regulate în Python [Cu exemple]: Cum se implementează?

Publicat: 2021-01-29

În timpul procesării datelor brute din orice sursă, extragerea informațiilor corecte este importantă, astfel încât să se poată obține informații semnificative din date. Uneori devine dificil să scoți modelul specific din date, mai ales în cazul datelor textuale.

Datele textuale constau din paragrafe de informații colectate prin formulare de sondaj, site-uri web de casare și alte surse. Modificarea diferitelor accesorii de șir cu funcții panda sau alte funcții personalizate poate duce la bun sfârșit, dar ce se întâmplă dacă trebuie obținut un model mai specific? Expresiile regulate fac această treabă cu ușurință.

Cuprins

Ce este o expresie regulată (RegEx)?

O expresie regulată este o reprezentare a unui set de caractere pentru șiruri. Prezintă o formulă generalizată pentru un anumit model din șiruri, care ajută la segregarea informațiilor corecte din grupul de date. Expresia constă de obicei din simboluri sau caractere care ajută la formarea regulii, dar, la prima vedere, poate părea ciudată și greu de înțeles. Aceste simboluri au semnificații asociate care sunt descrise aici.

Învață cursuri de știință a datelor de la cele mai bune universități din lume. Câștigă programe Executive PG, programe avansate de certificat sau programe de master pentru a-ți accelera cariera.

Meta-caracterele în RegEx

  1. '.': este un wildcard, se potrivește cu un singur caracter (orice caracter, dar o singură dată)
  2. ^: denotă începutul șirului
  3. $: denotă sfârșitul șirului
  4. [ ]: se potrivește cu unul dintre seturile de caractere din [ ]
  5. [az]: se potrivește cu unul din gama de caractere a,b,…,z
  6. [^abc] : se potrivește cu un caracter care nu este a,b sau c.
  7. a|b: se potrivește cu a sau b, unde a și b sunt șiruri
  8. () : furnizează domeniul de aplicare pentru operatori
  9. \ : permite escape pentru caracterele speciale (\t, \n, \b, \.)
  10. \b: se potrivește cu granița cuvântului
  11. \d : orice cifră, echivalent cu [0-9]
  12. \D: orice non-cifră, echivalent cu [^0-9]
  13. \s : orice spațiu alb, echivalent cu [ \t\n\r\f\v]
  14. \S : orice non-spațiu alb, echivalent cu [^\t\n\r\f\v]
  15. \w : orice alfanumeric, echivalent cu [a-zA-Z0-9_]
  16. \W : orice non-alfanumeric, echivalent cu [^a-zA-Z0-9_]
  17. „*”: se potrivește cu zero sau mai multe apariții
  18. „+”: se potrivește cu una sau mai multe apariții
  19. „?”: se potrivește cu zero sau cu o apariție
  20. {n}: exact n repetări, n>=0
  21. {n,}: cel puțin n repetări
  22. {,n}: cel mult n repetări
  23. {m,n}: cel puțin m repetări și cel mult n repetări

Exemple pentru a înțelege soluția

Acum că sunteți conștient de personajele care alcătuiesc un RegEx, să vedem cum funcționează:

1. Filtrarea e-mailului:

Să presupunem că doriți să filtrați toate ID-urile de e-mail dintr-un paragraf lung. Formatul general pentru un e-mail este:

nume utilizator@nume_domeniu. <domeniu_nivel_superior>

Numele de utilizator poate fi alfanumeric și, prin urmare, putem folosi \w pentru a le desemna, dar există posibilitatea ca utilizatorul să creeze un cont ca prenume.nume. Pentru a rezolva acest lucru, vom scăpa de punct și vom crea un set de personaje. În continuare, domain_name ar trebui să fie doar alfabetic și, prin urmare, A-Za-z va denota asta. Domeniul de nivel superior este de obicei .com, .in, .org, dar, în funcție de cazul de utilizare, puteți alege fie întregul interval alfabetic, fie să filtrați anumite domenii.

Expresia regulată a acestuia va arăta astfel:

^([a-zA-Z0-9_.]+)@([a-zA-Z0-9-]+)\.([a-zA-Z]{2,4})$

Aici sunt declarate, de asemenea, începutul și sfârșitul modelului, de asemenea, domeniul de nivel superior poate conține doar 2-4 caractere. Întreaga expresie are 3 grupuri.

2. Filtrarea datelor:

Informațiile textuale pe care le extrageți pot conține date și nu vă este disponibilă nicio coloană separată. Datele sunt un factor esențial care ajută la filtrarea datelor sau la analiza seriilor temporale. O anumită dată are formatul de dată/lună/an, unde data și luna se pot schimba.

De asemenea, lunile pot fi numerice, precum și sub formă de alfabet și în alfabete fie abrevieri, fie nume complete. Depinde în principal de câte cazuri sunt prezente în datele noastre și poate fi obținut doar prin lovire și proces.

Un RegEx simplu care acoperă o varietate de date este prezentat mai jos:

^(\d{1,2})[/-](\d{1,2})[/-](\d{2,4})$

Acest model captează formatul datei cu o cratimă sau o bară oblică. Data și luna sunt limitate la una sau două cifre, iar anul până la patru0 de cifre. Entitățile respective sunt capturate ca grupuri care sunt opționale în acest caz.

Citiți și: Idei și subiecte pentru proiecte Python

Cum se implementează în Python?

Expresiile regulate pe care tocmai le-am construit îndeplinesc criteriile respective pe care le-am asumat și acum este timpul să le implementăm în codul Python. Python are un modul încorporat numit re module care implementează funcționarea acestor expresii. Pur şi simplu,

import re

model = '^(\d{1,2})[/-](\d{1,2})[/-](\d{2,4})$'

Modulul Re oferă o gamă largă de funcții și toate au cazuri de utilizare diferite. Să ne uităm la câteva dintre funcțiile importante:

  1. re.findall(): Această funcție returnează lista tuturor potrivirilor din șirul de testare pe baza modelului trecut. Luați în considerare acest exemplu:

șir = '25-12-1999 text aleatoriu aici 25/12/1999'

print(re.findall(model, șir))

Va returna doar datele din șirul dintr-o listă.

  1. re.sub(): Sub în această funcție reprezintă substituție și face același lucru. Înlocuiește meciurile cu valoarea de înlocuire furnizată. Funcția preia modelul, șirul, valoarea de înlocuire și parametrul opțional al numărării. Parametrul de numărare controlează câte apariții doriți să înlocuiți. În mod implicit, le înlocuiește pe toate și returnează noul șir.
  2. re.split(): Împarte șirul la site-urile potrivite și returnează părțile ca șiruri separate într-o listă.
  3. re.search(): Această funcție returnează obiectul potrivire care conține potrivirea găsită în șir împreună cu toate grupurile pe care le-a capturat. Poate fi util atunci când doriți să stocați aceste grupuri ca coloane separate.

Pentru a efectua acest lucru:

potrivire = căutare.(model, șir)

match.group(1)

Group(0) returnează întregul meci și numerele următoare corespunzătoare indică alte grupuri.

Checkout: Salariu de dezvoltator Python în India

Concluzie

Expresiile regulate sunt o modalitate puternică de a captura modele în datele textuale. Poate fi nevoie de un pic de efort suplimentar pentru a menține comanda diferitelor personaje, dar simplifică procesul de extragere a datelor în cazurile de utilizare complexe.

Dați câteva exemple de expresii regulate în Python.

Următoarele exemple ilustrează funcționarea sau expresiile regulate în Python:
A. Filtrarea e-mailului
Expresiile regulate pot fi utilizate eficient pentru a filtra e-mailurile. Sintaxa obișnuită pentru filtrarea e-mailului este - ^((a-zA-Z0-9_.)+)@((a-zA-Z0-9-)+).((a-zA-Z){2,4} )$
Această expresie este împărțită în trei grupuri și abordează multe cazuri, inclusiv - atunci când numele de utilizator este alfanumeric și când are un punct, de exemplu, „primul.ultimul@”. Această expresie va fi folosită pentru domeniile de top care conțin 2-4 caractere.
b. Filtrarea datelor
Datele pot fi un factor crucial în gestionarea filtrării datelor. Datele textuale cu care aveți de-a face conțin adesea date. Expresia regulată sau RegEx care extrage datele dintr-un text normal este - ^(d{1,2})(/-)(d{1,2})(/-)(d{2,4})$
Data și luna pot avea până la 2 cifre, în timp ce luna poate avea până la 4 cifre.

Care sunt funcțiile implicate în implementarea expresiilor regulate în Python?

Următoarele funcții sunt implicate în implementarea expresiilor regulate în Python:
1. re.findall() - Această funcție acceptă un model care urmează să fie potrivit cu șirul de text. Returnează șirurile care se potrivesc.
2. re.sub() - Sub în „re.sub” înseamnă „substituție”. Această metodă îndeplinește exact aceeași funcție ca și funcția „re.findall()”.
3. re.split() - Separă șirurile din jurul separatorului care urmează să-i fie transmis ca parametru. Separatorul poate fi orice.
4. re.search() - Această funcție returnează potrivirea găsită în șir împreună cu alte grupuri de șiruri pe care le-a capturat.

Care sunt unele secvențe speciale folosite în expresiile regulate?

Următoarele sunt câteva dintre secvențele speciale utilizate în expresiile regulate:
1. R: Verificați dacă șirul începe cu caracterul dat.
2. (Forward Slash) b: Verifică dacă șirul începe sau se termină cu caracterul dat. (șir)/b verifică începutul în timp ce (bară oblică inversă) b (șir) verifică sfârșitul.
3. B: Este exact opusul b. Verifică dacă șirul nu începe cu caracterul dat.
4. d: Verifică valorile numerice din șir.
5. D: Verifică orice valoare sau caracter nenumeric.
6. s: Verifică orice caracter de spațiu alb.
7. S: Verifică orice caracter care nu conține spații albe.
8. w: Verifică orice caracter alfanumeric.
9. W: Verifică orice caracter non-alfanumeric.