Python RegEx: re.match(), re.search(), re.findall() s primjerom
U ฤemu je regularni izraz Python?
A Regularni izraz (RE) u programskom jeziku je poseban tekstualni niz koji se koristi za opisivanje uzorka pretraลพivanja. Iznimno je koristan za izdvajanje informacija iz teksta kao ลกto su kod, datoteke, dnevnik, proraฤunske tablice ili ฤak dokumenti.
Dok koristite Python regularni izraz prva stvar koju treba prepoznati jest da je sve u biti znak, a mi piลกemo uzorke koji odgovaraju odreฤenom nizu znakova koji se takoฤer naziva nizom. Ascii ili latiniฤna slova su ona koja se nalaze na vaลกim tipkovnicama, a Unicode se koristi za podudaranje stranog teksta. Ukljuฤuje znamenke i interpunkcijske znakove i sve posebne znakove poput $#@!%, itd.
Na primjer, a Python regularni izraz mogao bi reฤi programu da traลพi odreฤeni tekst iz niza i zatim ispiลกe rezultat u skladu s tim. Izraลพavanje moลพe ukljuฤivati
- Usklaฤivanje teksta
- Ponavljanje
- grananje
- Sastav uzorka itd.
Regularni izraz ili RegEx u Python oznaฤava se kao RE (RE, regularni izrazi ili uzorak regularnog izraza) uvoze se putem re modul. Python podrลพava regularni izraz kroz knjiลพnice. RegEx u Python podrลพava razne stvari kao ลกto su Modifikatori, identifikatori i razmaci.
| identifikatori | Izmjenjivaฤi | Znakovi razmaka | Potreban bijeg |
|---|---|---|---|
| \d= bilo koji broj (cifra) | \d predstavlja znamenku. Primjer: \d{1,5} deklarirat ฤe znamenku izmeฤu 1,5 kao 424,444,545 itd. | \n = novi redak | . + * ? [] $ ^ () {} | \ |
| \D= sve osim broja (koji nije znamenka) | + = odgovara 1 ili viลกe | \s= razmak | |
| \s = razmak (tabulator, razmak, novi red itd.) |
? = odgovara 0 ili 1 | \t =tab | |
| \S= sve osim razmaka | * = 0 ili viลกe | \e = bijeg | |
| \w = slova ( Odgovara alfanumeriฤkom znaku, ukljuฤujuฤi โ_โ) | $ odgovara kraju niza | \r = povratak na poฤetak | |
| \W = bilo ลกto osim slova ( Odgovara nealfanumeriฤkom znaku iskljuฤujuฤi โ_โ) | ^ odgovara poฤetku niza | \f= unos obrasca | |
| . = sve osim slova (toฤke) | | odgovara bilo ili x/y | ------ | |
| \b = bilo koji znak osim novog retka | [] = raspon ili "varijanca" | ------ | |
| \. | {x} = ova koliฤina prethodnog koda | ------ |
Sintaksa regularnog izraza (RE).
import re
- โreโ modul ukljuฤen Python prvenstveno se koristi za pretraลพivanje nizova i manipulaciju
- Takoฤer se ฤesto koristi za web stranicu "struganjeโ (izvlaฤenje velike koliฤine podataka s web stranica)
Zapoฤet ฤemo poduku o izrazima ovom jednostavnom vjeลพbom koristeฤi izraze (w+) i (^).
Primjer w+ i ^ izraza
- โ^โ: Ovaj izraz odgovara poฤetku niza
- โw+โ: Ovaj izraz odgovara alfanumeriฤkom znaku u nizu
Ovdje ฤemo vidjeti a Python RegEx Primjer kako moลพemo koristiti w+ i ^ izraze u naลกem kodu. Pokrivamo funkciju re.findall() u Python, kasnije u ovom vodiฤu, ali neko vrijeme ฤemo se jednostavno usredotoฤiti na \w+ i \^ izraz.
Na primjer, za naลก niz "guru99, obrazovanje je zabavno" ako izvrลกimo kod s w+ i^, dat ฤe izlaz "guru99".
import re xx = "guru99,education is fun" r1 = re.findall(r"^\w+",xx) print(r1)
Upamtite, ako uklonite znak + iz w+, izlaz ฤe se promijeniti i dati ฤe samo prvi znak prvog slova, tj. [g]
Primjer izraza \s u funkciji re.split
- โsโ: Ovaj izraz se koristi za stvaranje razmaka u nizu
Da biste razumjeli kako ovaj RegEx u Python djela, poฤinjemo s jednostavnim Python RegEx Primjer funkcije dijeljenja. U primjeru smo podijelili svaku rijeฤ pomoฤu funkcije "re.split", a istovremeno smo upotrijebili izraz \s koji omoguฤuje zasebno raลกฤlanjivanje svake rijeฤi u nizu.
Kada izvrลกite ovaj kod, on ฤe vam dati izlaz ['we', 'are', 'splitting', 'the', 'words'].
Sada da vidimo ลกto ฤe se dogoditi ako uklonite โ\โ iz s. Nema 's' abecede u izlazu, to je zato ลกto smo uklonili '\' iz niza, a on procjenjuje โsโ kao uobiฤajeni znak i tako dijeli rijeฤi gdje god pronaฤe โsโ u nizu.
Sliฤno tome, postoji niz drugih Python regularni izraz koji moลพete koristiti na razne naฤine Python poput \d,\D,$,\.,\b, itd.
Ovdje je kompletan kod
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')))
Zatim ฤemo vidjeti vrste metoda koje se koriste s regularnim izrazima Python.
Koriลกtenje metoda regularnih izraza
Paket โreโ pruลพa nekoliko metoda za stvarno izvrลกavanje upita na ulaznom nizu. Vidjet ฤemo metode re in Python:
- re.match()
- istraลพivanje()
- re.findall()
biljeลกke: Na temelju regularnih izraza, Python nudi dvije razliฤite primitivne operacije. Metoda podudaranja provjerava podudaranje samo na poฤetku niza, dok pretraลพivanje provjerava podudaranje bilo gdje u nizu.
re.match()
re.match() funkcija re in Python pretraลพit ฤe uzorak regularnog izraza i vratiti prvo pojavljivanje. The Python RegEx Match metoda provjerava podudaranje samo na poฤetku niza. Dakle, ako se pronaฤe podudaranje u prvom retku, vraฤa se objekt podudaranja. Ali ako se podudaranje pronaฤe u nekom drugom retku, Python Funkcija RegEx Match vraฤa null.
Na primjer, razmotrite sljedeฤi kod Python funkcija re.match(). Izraz โw+โ i โ\Wโ odgovarat ฤe rijeฤima koje poฤinju slovom 'g' i nakon toga, sve ลกto ne poฤinje sa 'g' nije identificirano. Kako bismo provjerili podudaranje za svaki element na popisu ili nizu, u ovome pokreฤemo forloop Python re.match() Primjer.
re.search(): Pronalaลพenje uzorka u tekstu
istraลพivanje() funkcija ฤe pretraลพiti uzorak regularnog izraza i vratiti prvo pojavljivanje. Za razliku od Python re.match(), provjerit ฤe sve retke ulaznog niza. The Python funkcija re.search() vraฤa objekt podudaranja kada je uzorak pronaฤen i "null" ako uzorak nije pronaฤen
Kako koristiti search()?
Da biste koristili funkciju search(), morate izvrลกiti uvoz Python prvo ponovno modul, a zatim izvrลกite kod. The Python funkcija re.search() uzima "uzorak" i "tekst" za skeniranje iz naลกeg glavnog niza
Na primjer, ovdje traลพimo dva doslovna niza "Testiranje softvera" "guru99", u tekstualnom nizu "Softver Ispitivanje je zabavnoโ. Za "testiranje softvera" pronaลกli smo podudaranje stoga vraฤa izlaz Python re.search() Primjer kao "pronaลกao podudaranje", dok za rijeฤ "guru99" nismo mogli pronaฤi u nizu stoga vraฤa izlaz kao "Nema podudaranja".
re.findall()
pronaฤi sve () modul se koristi za traลพenje "svih" pojavljivanja koja odgovaraju zadanom uzorku. Nasuprot tome, modul search() vratit ฤe samo prvo pojavljivanje koje odgovara navedenom uzorku. findall() ฤe iterirati kroz sve retke datoteke i vratiti sve nepreklapajuฤe rezultate uzorka u jednom koraku.
Kako koristiti re.findall() u Python?
Ovdje imamo popis adresa e-poลกte i ลพelimo da se sve adrese e-poลกte dohvate s popisa, koristimo metodu re.findall() u Python. Pronaฤi ฤe sve adrese e-poลกte s popisa.
Ovdje je cijeli kod za primjer 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 Zastave
Mnogi Python Regex metode i regex funkcije uzimaju izborni argument koji se zove Zastavice. Ove zastavice mogu modificirati znaฤenje zadanog Python Regex uzorak. Da bismo ih razumjeli, vidjet ฤemo jedan ili dva primjera ovih zastava.
Razne zastave koje se koriste u Python ukljuฤuje
| Sintaksa za zastavice regularnih izraza | ล to ova zastava radi |
|---|---|
| [re.M] | Neka poฤetak/kraj razmotri svaki redak |
| [re.I] | Zanemaruje velika i mala slova |
| [re.S] | Napravi [ . ] |
| [re.U] | Neka { \w,\W,\b,\B} slijedi Unicode pravila |
| [re.L] | Neka {\w,\W,\b,\B} prati lokalizaciju |
| [pon.X] | Dopusti komentiranje u Regexu |
Primjer re.M ili Multiline Flags
U viลกeretku znak uzorka [^] odgovara prvom znaku niza i poฤetku svakog retka (koji slijedi odmah nakon svakog novog retka). Dok se izraz malo "w" koristi za oznaฤavanje razmaka znakovima. Kada pokrenete kod, prva varijabla โk1โ ispisuje samo znak 'g' za rijeฤ guru99, dok kada dodate multiline flag, ona dohvaฤa prve znakove svih elemenata niza.
Evo koda
import re xx = """guru99 careerguru99 selenium""" k1 = re.findall(r"^\w", xx) k2 = re.findall(r"^\w", xx, re.MULTILINE) print(k1) print(k2)
- Deklarirali smo varijablu xx za string โ guru99โฆ. careerguru99โฆ.selenโ
- Pokrenite kod bez koriลกtenja zastavica u viลกe redaka, daje izlaz samo 'g' iz redaka
- Pokrenite kod sa zastavom "multiline", kada ispiลกete 'k2' daje izlaz kao 'g', 'c' i 's'
- Dakle, razliku koju moลพemo vidjeti nakon i prije dodavanja viลกe redaka u gornjem primjeru.
Isto tako, moลพete koristiti i druge Python oznake kao ลกto su re.U (Unicode), re.L (Slijedite lokalizaciju), re.X (Dopusti komentar), itd.
Python 2 Primjer
Gornji kodovi su Python 3 primjera, ako ลพelite uฤi Python 2 razmotrite sljedeฤi kod.
# 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
Testirajte svoj Python Znanje - Sanxin
1. Koja se metoda koristi za pronalaลพenje svih pojavljivanja uzorka u nizu?
- istraลพivanje()
- re.match()
- re.findall()
- re.split()
2. ล to klasa znakova \d predstavlja u regularnim izrazima?
- Bilo koja znamenka (0-9)
- Bilo koji znak koji nije znamenka
- Bilo koji razmak
- Bilo koje slovo ili broj
3. Koju biste funkciju upotrijebili za dijeljenje niza na temelju razmaka?
- re.split(r'\s', niz)
- re.findall(r'\w+', niz)
- re.match(r'\s+', niz)
- re.split(r'\w+', niz)
4. Koja je glavna razlika izmeฤu re.match() i re.search()?
- re.match() traลพi uzorak na poฤetku niza, dok re.search() traลพi uzorak bilo gdje u nizu.
- re.match() vraฤa sva podudaranja, dok re.search() vraฤa prvo podudaranje.
- re.search() je brลพi od re.match().
- Obje funkcije ponaลกaju se na isti naฤin.
Rezime
Regularni izraz u a programski jezik je poseban tekstualni niz koji se koristi za opisivanje uzorka pretraลพivanja. Ukljuฤuje znamenke i interpunkcijske znakove i sve posebne znakove poput $#@!%, itd. Izraz moลพe ukljuฤivati โโliteral
- Usklaฤivanje teksta
- Ponavljanje
- grananje
- Sastav uzorka itd.
In Python, regularni izraz je oznaฤen kao RE (RE, regularni izrazi ili uzorak regularnog izraza) ugraฤeni su kroz Python re modul.
- โreโ modul ukljuฤen Python prvenstveno se koristi za pretraลพivanje nizova i manipulaciju
- Takoฤer se ฤesto koristi za "skrapiranje" web stranice (izvlaฤenje velike koliฤine podataka s web stranica)
- Metode regularnog izraลพavanja ukljuฤuju re.match(),re.search()& re.findall()
- Ostalo Python RegEx metode zamjene su sub() i subn() koje se koriste za zamjenu odgovarajuฤih nizova u re
- Python Zastave Mnogi Python Regex metode i regex funkcije uzimaju izborni argument koji se zove Zastavice
- Ove zastavice mogu modificirati znaฤenje zadanog Regex uzorka
- raznovrstan Python oznake koje se koriste u Regex metodama su re.M, re.I, re.S, itd.







