Python RegEx: re.match(), re.search(), re.findall() cu Exemplu

În ce este expresia regulată Python?

A Expresie regulată (RE) într-un limbaj de programare este un șir de text special folosit pentru a descrie un model de căutare. Este extrem de util pentru extragerea de informații din text precum cod, fișiere, jurnal, foi de calcul sau chiar documente.

În timp ce utilizați Python Expresia regulată, primul lucru pe care trebuie să-l recunoaștem este că totul este în esență un caracter și scriem modele pentru a se potrivi cu o anumită secvență de caractere, denumită și șir. Literele Ascii sau latine sunt cele care se află pe tastaturi și Unicode este folosit pentru a potrivi textul străin. Include cifre și semne de punctuație și toate caracterele speciale precum $#@!% etc.

De exemplu, a Python Expresia regulată ar putea spune unui program să caute text specific din șir și apoi să imprime rezultatul în consecință. Expresia poate include

  • Potrivirea textului
  • Repetiţie
  • branșament
  • Model-compoziție etc.

Expresie regulată sau RegEx în Python este notat ca RE (RE, regexe sau model regex) sunt importate prin re modul. Python acceptă exprimarea regulată prin biblioteci. RegEx în Python susține diverse lucruri precum Modificatori, identificatori și caractere de spațiu alb.

Identificatorii Modificatorii Caractere cu spațiu alb Evadare necesară
\d= orice număr (o cifră) \d reprezintă o cifră. Ex: \d{1,5} va declara o cifră între 1,5 ca 424,444,545 etc. \n = linie nouă . + * ? [] $ ^ () {} | \
\D= orice în afară de un număr (o non-cifră) + = se potrivește cu 1 sau mai multe \s= spațiu
\s = spațiu
(filă, spațiu, linie nouă etc.)
? = se potrivește cu 0 sau 1 \t =tab
\S= orice altceva decât un spațiu * = 0 sau mai mult \e = evadare
\w = litere (Potriviți caracterul alfanumeric, inclusiv „_”) $ potrivește sfârșitul unui șir \r = întoarcere cărucior
\W =orice altceva decât litere (Se potrivește cu un caracter non-alfanumeric, excluzând „_”) ^ potrivește începutul unui șir \f= feed de formular
. = orice în afară de litere (puncte) | se potrivește fie cu x/y ------
\b = orice caracter, cu excepția liniei noi [] = interval sau „varianță” ------
\. {x} = această cantitate de cod precedent ------

Sintaxa expresiei regulate (RE).

import re
  • Modulul „re” inclus cu Python folosit în principal pentru căutarea și manipularea șirurilor
  • Folosit frecvent și pentru pagina web „Răzuire” (extrageți o cantitate mare de date de pe site-uri web)

Vom începe tutorialul de expresie cu acest exercițiu simplu folosind expresiile (w+) și (^).

Exemplu de expresie w+ și ^

  • „^”: Această expresie se potrivește cu începutul unui șir
  • „w+„: Această expresie se potrivește cu caracterul alfanumeric din șir

Aici vom vedea a Python RegEx Exemplu despre cum putem folosi expresiile w+ și ^ în codul nostru. Acoperim funcția re.findall() în Python, mai târziu în acest tutorial, dar pentru o perioadă ne concentrăm pur și simplu pe expresia \w+ și \^.

De exemplu, pentru șirul nostru „guru99, educația este distractivă” dacă executăm codul cu w+ și ^, va da rezultatul „guru99”.

Exemplu de expresie w+ și ^

import re
xx = "guru99,education is fun"
r1 = re.findall(r"^\w+",xx)
print(r1)

Amintiți-vă, dacă eliminați semnul + din w+, rezultatul se va modifica și va oferi doar primul caracter al primei litere, adică [g]

Exemplu de expresie \s în funcția re.split

  • „s”: Această expresie este folosită pentru a crea un spațiu în șir

Pentru a înțelege cum intră acest RegEx Python funcționează, începem cu un simplu Python RegEx Exemplu de funcție split. În exemplu, am împărțit fiecare cuvânt folosind funcția „re.split” și, în același timp, am folosit expresia \s care permite analiza fiecărui cuvânt din șir separat.

Expresia \s în funcția re.split

Când executați acest cod, acesta vă va oferi rezultatul [„noi”, „sunt”, „despărțire”, „cuvintele”, „cuvinte”].

Acum, să vedem ce se întâmplă dacă eliminați „\” din s. Nu există alfabetul „s” în ieșire, acest lucru se datorează faptului că am eliminat „\” din șir și evaluează „s” ca un caracter obișnuit și astfel împărțiți cuvintele oriunde găsește „s” în șir.

Expresia \s în funcția re.split

În mod similar, există și serie de altele Python expresie regulată pe care o puteți folosi în diferite moduri Python precum \d,\D,$,\.,\b etc.

Aici este codul complet

import re
xx = "guru99,education is fun"
r1 = re.findall(r"^\w+", xx)
print((re.split(r'\s','we are splitting the words')))
print((re.split(r's','split the words')))

În continuare, vom vedea tipurile de metode care sunt utilizate cu expresia regulată în Python.

Folosind metode de exprimare regulată

Pachetul „re” oferă mai multe metode pentru a efectua efectiv interogări pe un șir de intrare. Vom vedea metodele de re in Python:

  • re.match()
  • cercetare()
  • re.findall()

notițe: Pe baza expresiilor regulate, Python oferă două operații primitive diferite. Metoda de potrivire verifică o potrivire numai la începutul șirului, în timp ce căutarea verifică o potrivire oriunde în șir.

re.match()

re.match() functie de re in Python va căuta modelul expresiei regulate și va returna prima apariție. The Python Metoda RegEx Match verifică o potrivire numai la începutul șirului. Deci, dacă o potrivire este găsită în prima linie, returnează obiectul potrivire. Dar dacă o potrivire este găsită într-o altă linie, Python Funcția RegEx Match returnează null.

De exemplu, luați în considerare următorul cod de Python funcția re.match(). Expresia „w+” și „\W” se vor potrivi cu cuvintele care încep cu litera „g” și, după aceea, orice lucru care nu este început cu „g” nu este identificat. Pentru a verifica potrivirea pentru fiecare element din listă sau șir, rulăm forloop în aceasta Python re.match() Exemplu.

re.match()

re.search(): Găsirea unui model în text

cercetare() funcția va căuta modelul expresiei regulate și va returna prima apariție. Spre deosebire de Python re.match(), va verifica toate liniile șirului de intrare. The Python Funcția re.search() returnează un obiect potrivire când modelul este găsit și „null” dacă modelul nu este găsit

Cum se utilizează căutarea()?

Pentru a utiliza funcția search(), trebuie să importați Python re modulul mai întâi și apoi executați codul. The Python Funcția re.search() preia „modelul” și „textul” pentru a scana din șirul nostru principal

utilizați căutarea()

De exemplu aici căutăm două șiruri literale „Testare software” „guru99”, într-un șir de text „Software Testarea este distractiv”. Pentru „testarea software-ului” am găsit potrivirea, deci returnează rezultatul Python re.search() Exemplu ca „a găsit o potrivire”, în timp ce pentru cuvântul „guru99” nu am putut găsi în șir, prin urmare, returnează rezultatul ca „Fără potrivire”.

re.findall()

Găsiți toate() modulul este folosit pentru a căuta „toate” aparițiile care se potrivesc cu un model dat. În schimb, modulul search() va returna doar prima apariție care se potrivește cu modelul specificat. findall() va itera peste toate liniile fișierului și va returna toate potrivirile de tipar care nu se suprapun într-un singur pas.

Cum se utilizează re.findall() în Python?

Aici avem o listă de adrese de e-mail și dorim ca toate adresele de e-mail să fie extrase din listă, folosim metoda re.findall() în Python. Va găsi toate adresele de e-mail din listă.

Utilizați re.findall() în Python

Iată codul complet pentru Exemplu de re.findall()

import re

list = ["guru99 get", "guru99 give", "guru Selenium"]
for element in list:
    z = re.match("(g\w+)\W(g\w+)", element)
if z:
    print((z.groups()))
    
patterns = ['software testing', 'guru99']
text = 'software testing is fun?'
for pattern in patterns:
    print('Looking for "%s" in "%s" ->' % (pattern, text), end=' ')
    if re.search(pattern, text):
        print('found a match!')
else:
    print('no match')
abc = 'guru99@google.com, careerguru99@hotmail.com, users@yahoomail.com'
emails = re.findall(r'[\w\.-]+@[\w\.-]+', abc)
for email in emails:
    print(email)

Python Steaguri

Multe Python Metodele Regex și funcțiile Regex au un argument opțional numit Flags. Aceste steaguri pot modifica semnificația datei Python Modelul Regex. Pentru a le înțelege, vom vedea unul sau două exemple ale acestor steaguri.

Diverse steaguri folosite în Python include

Sintaxă pentru steaguri Regex Ce face acest steag
[re.M] Faceți începutul/sfârșitul să ia în considerare fiecare linie
[re.I] Ignoră majuscule
[re.S] Face [ . ]
[re.U] Faceți ca { \w,\W,\b,\B} să urmeze regulile Unicode
[re.L] Faceți ca {\w,\W,\b,\B} să urmeze localitatea
[re.X] Permiteți comentarii în Regex

Exemplu de steaguri re.M sau Multiline

În mai multe linii, caracterul model [^] se potrivește cu primul caracter al șirului și începutul fiecărei linii (urmând imediat după fiecare linie nouă). În timp ce expresia „w” mic este folosită pentru a marca spațiul cu caractere. Când rulați codul, prima variabilă „k1” afișează doar caracterul „g” pentru cuvântul guru99, în timp ce atunci când adăugați un steag cu mai multe linii, preia primele caractere ale tuturor elementelor din șir.

Exemplu de steaguri re.M sau Multiline

Iată codul

import re
xx = """guru99 
careerguru99	
selenium"""
k1 = re.findall(r"^\w", xx)
k2 = re.findall(r"^\w", xx, re.MULTILINE)
print(k1)
print(k2)
  • Am declarat variabila xx pentru șirul ” guru99…. careerguru99….seleniu”
  • Rulați codul fără a utiliza stegulețe pe mai multe linii, dă ieșirea doar „g” din linii
  • Rulați codul cu indicatorul „multiline”, când tipăriți „k2” iese ca „g”, „c” și „s”
  • Deci, diferența pe care o putem vedea după și înainte de adăugarea mai multor linii în exemplul de mai sus.

De asemenea, puteți folosi și altele Python steaguri precum re.U (Unicode), re.L (Urmărește localitatea), re.X (Permite comentariu), etc.

Python 2 Exemplu

Codurile de mai sus sunt Python 3 exemple, dacă vrei să alergi Python 2 vă rugăm să luați în considerare următorul cod.

# Example of w+ and ^ Expression
import re
xx = "guru99,education is fun"
r1 = re.findall(r"^\w+",xx)
print r1

# Example of \s expression in re.split function
import re
xx = "guru99,education is fun"
r1 = re.findall(r"^\w+", xx)
print (re.split(r'\s','we are splitting the words'))
print (re.split(r's','split the words'))

# Using re.findall for text
import re

list = ["guru99 get", "guru99 give", "guru Selenium"]
for element in list:
    z = re.match("(g\w+)\W(g\w+)", element)
if z:
    print(z.groups())
    
patterns = ['software testing', 'guru99']
text = 'software testing is fun?'
for pattern in patterns:
    print 'Looking for "%s" in "%s" ->' % (pattern, text),
    if re.search(pattern, text):
        print 'found a match!'
else:
    print 'no match'
abc = 'guru99@google.com, careerguru99@hotmail.com, users@yahoomail.com'
emails = re.findall(r'[\w\.-]+@[\w\.-]+', abc)
for email in emails:
    print email

# Example of re.M or Multiline Flags
import re
xx = """guru99 
careerguru99	
selenium"""
k1 = re.findall(r"^\w", xx)
k2 = re.findall(r"^\w", xx, re.MULTILINE)
print k1
print k2

Testați-vă Python Cunoştinţe

1. Ce metodă este folosită pentru a găsi toate aparițiile unui model într-un șir?

  • cercetare()
  • re.match()
  • re.findall()
  • re.split()
re.findall() este folosit pentru a găsi toate aparițiile unui model într-un șir.

2. Ce reprezintă clasa de caractere \d în expresiile regulate?

  • Orice cifră (0-9)
  • Orice caracter fără cifre
  • Orice caracter alb
  • Orice literă sau număr
\d reprezintă orice cifră (0-9).

3. Ce funcție ați folosi pentru a împărți un șir pe baza spațiilor?

  • re.split(r'\s', șir)
  • re.findall(r'\w+', șir)
  • re.match(r'\s+', șir)
  • re.split(r'\w+', șir)
re.split(r'\s', string) împarte un șir pe baza spațiilor folosind expresia \s.

4. Care este principala diferență dintre re.match() și re.search()?

  • re.match() caută un model la începutul unui șir, în timp ce re.search() caută un model oriunde în șir.
  • re.match() returnează toate potrivirile, în timp ce re.search() returnează prima potrivire.
  • re.search() este mai rapid decât re.match().
  • Ambele funcții se comportă la fel.
re.match() caută un model la începutul unui șir, în timp ce re.search() caută un model oriunde în șir.

Rezumat

O expresie regulată în a limbaj de programare este un șir de text special folosit pentru a descrie un model de căutare. Include cifre și semne de punctuație și toate caracterele speciale precum $#@!% etc. Expresia poate include literal

  • Potrivirea textului
  • Repetiţie
  • branșament
  • Model-compoziție etc.

In Python, o expresie regulată este desemnată ca RE (RE, regexe sau model regex) sunt încorporate prin Python re modul.

  • Modulul „re” inclus cu Python folosit în principal pentru căutarea și manipularea șirurilor
  • Folosit frecvent și pentru pagina web „Scraping” (extrageți o cantitate mare de date de pe site-uri web)
  • Metodele de exprimare regulată includ re.match(),re.search() și re.findall()
  • Altele Python Metodele de înlocuire RegEx sunt sub() și subn() care sunt folosite pentru a înlocui șirurile de caractere potrivite în re
  • Python Steaguri Multe Python Metodele Regex și funcțiile Regex au un argument opțional numit Flags
  • Aceste steaguri pot modifica semnificația modelului Regex dat
  • Variat Python steagurile utilizate în metodele Regex sunt re.M, re.I, re.S etc.

Citește mai mult Readmore