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 = '[email protected], [email protected], [email protected]'
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 = '[email protected], [email protected], [email protected]'
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 Noutฤƒศ›i

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.

Rezumaศ›i aceastฤƒ postare cu: