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 = 'guru99@google.com, careerguru99@hotmail.com, users@yahoomail.com' 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 = '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
Testirajte svoj Python Znanje
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.