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โ.
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.
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.
ร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.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
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ฤ.
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.
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()
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
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)
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.
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.







