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".

Primjer w+ i ^ izraza

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.

\s izraz u funkciji re.split

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.

\s izraz u funkciji re.split

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.match()

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

koristi search()

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.

 Upotrijebite re.findall(). Python

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.

Primjer re.M ili Multiline Flags

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()
re.findall() se koristi za pronalaลพenje svih pojavljivanja uzorka u nizu.

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
\d predstavlja bilo koju znamenku (0-9).

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)
re.split(r'\s', string) dijeli niz na temelju razmaka koristeฤ‡i izraz \s.

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.
re.match() traลพi uzorak na poฤetku niza, dok re.search() traลพi uzorak bilo gdje u nizu.

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.

Saลพmite ovu objavu uz: