Dokumentacija za Re modul za Python 3 u . Re modul za regularne izraze

Regularni izrazi su vrlo popularna komponenta gotovo svakog programskog jezika. Oni vam pomažu da brzo pristupite informacijama koje su vam potrebne. Posebno se koriste kada je potrebno obraditi tekst. Python podrazumevano dolazi sa posebnim modulom. re, koji je odgovoran za rad sa regularnim izrazima.

Danas ćemo detaljno razgovarati o tome šta je to općenito, kako raditi s njima i kako modul re će pomoći.

Regularni izrazi: uvod

Koja je upotreba regularnih izraza? Gotovo sve. Na primjer, ove:

  1. Web aplikacije koje zahtijevaju validaciju teksta. Tipičan primjer su onlajn klijenti pošte.
  2. Bilo koji drugi projekti vezani za tekstove, baze podataka i tako dalje.

Prije nego počnemo raščlanjivati ​​sintaksu, trebali bismo detaljnije razumjeti osnovne principe funkcionisanja biblioteke re i uopšte, šta je generalno dobro u vezi sa tim. Navest ćemo i primjere iz stvarne prakse, gdje ćemo opisati mehanizam njihove upotrebe. Možete kreirati takav predložak, pogodan za vas da izvršite širok spektar operacija s tekstom.

Šta je šablon u biblioteci Re?

Pomoću njega možete tražiti informacije različitih tipova, dobiti informacije koje im odgovaraju, kako biste druge funkcije učinili prilagodljivijim. I, naravno, obraditi ove podatke.

Na primjer, uzmite sljedeći predložak: s+. To znači bilo koji razmak. Ako mu dodate znak plus, to znači da uzorak uključuje više od jednog razmaka. Može čak i da odgovara znakovima tabulatora koji su pozvani sa t+.

Prije nego ih koristite, morate uvesti biblioteku Re. Nakon toga koristimo posebnu naredbu za kompajliranje šablona. Ovo se radi u dva koraka.

>>> uvoz re

>>> regex = re.compile('s+')

Konkretno, ovaj kod izvodi operaciju kompajliranja predloška koji se može koristiti. na primjer, za traženje razmaka (jedan ili više).

Dobijanje odvojenih informacija iz različitih nizova pomoću regularnih izraza

Pretpostavimo da imamo varijablu koja sadrži sljedeće informacije.

>>> text = “””100 INF Informatika

213 MAT Matematika  

156 HRV engleski»»»

Sadrži tri kursa obuke. Svaki od njih se sastoji od tri dijela – broja, šifre i naziva. Vidimo da je interval između ovih riječi različit. Šta učiniti da se ovaj red razbije na zasebne brojeve i riječi? Postoje dvije metode za postizanje ovog cilja:

  1. pozvati funkciju re.split.
  2. primijeniti funkciju Split za regularni izraz.

Evo primjera korištenja sintakse svake od metoda za našu varijablu.

>>> re.split('s+', tekst)  

# ili

>>> regex.split(tekst)

Izlaz: ['100', 'INF', 'Informatika', '213', 'MAT', 'Matematika', '156', 'ENG', 'Engleski']

Općenito, obje metode se mogu koristiti. Ali zapravo je mnogo lakše koristiti regularni izraz umjesto višestruke upotrebe funkcije. re.split.

Pronalaženje podudaranja s tri funkcije

Recimo da trebamo izdvojiti samo brojeve iz niza. Šta je potrebno učiniti za ovo?

re.findall()

Ovdje je primjer upotrebe funkcije findall(), koji, zajedno sa regularnim izrazima, omogućava izdvajanje pojavljivanja jednog ili više brojeva iz tekstualne varijable.

>>> print (tekst)  

100 INF Informatika

213 MAT Matematika  

156 ENG engleski

>>> regex_num = re.compile('d+')  

>>> regex_num.findall(tekst)  

['100', '213', '156']

Zajedno sa simbolom d koristili smo šablon koji označava apsolutno bilo koju numeričku vrijednost koja se nalazi u varijabli ili tekstu. A pošto smo tamo dodali jedan +, to znači da mora biti prisutan barem jedan broj. 

Također možete koristiti znak * da navedete da prisustvo cifre nije potrebno za pronalaženje podudaranja.

Ali u našem slučaju, pošto smo koristili +, ekstrahovali smo sa findall() 1 ili više digitalnih oznaka predmeta iz teksta. Dakle, u našem slučaju, regularni izrazi djeluju kao postavke za funkciju.

re.search() vs re.match()

Kao što možete pretpostaviti iz naziva funkcija, prva traži podudaranje u tekstu. Pitanje: Koja je razlika između findall? Poenta je da vraća određeni objekt koji odgovara uzorku, a ne cijeli niz pronađenih rezultata u obliku liste, kao prethodna funkcija.

Zauzvrat, funkcija re.match radi isto. Samo je sintaksa drugačija. Šablon se mora postaviti na početak. 

Uzmimo primjer koji to pokazuje.

>>> # kreiraj promenljivu sa tekstom

>>> text2 = «»»INF informatika

213 MAT Matematika 156″»»  

>>> # kompajliraj regularni izraz i traži obrasce

>>> regex_num = re.compile('d+')  

>>> s = regex_num.search(text2)  

>>> print('Prvi indeks: ', s.start())  

>>> print('Posljednji indeks: ', s.end())  

>>> print(text2[s.start():s.end()]) 

Prvi indeks: 17 

Zadnji indeks: 20

213

Ako želite dobiti sličan rezultat na drugačiji način, možete koristiti funkciju grupa().

Zamjena dijela teksta sa Re bibliotekom

Za zamjenu teksta koristite funkciju re.sub(). Pretpostavimo da se naša lista kurseva malo promijenila. Vidimo da nakon svake digitalne vrijednosti imamo karticu. Naš zadatak je spojiti sav ovaj niz u jednu liniju. Da bismo to učinili, moramo zamijeniti izraz s+ proći 

Originalni tekst je bio:

# kreirajte varijablu s tekstom

>>> tekst = “””100 INF t Informatika

213 MAT t Math  

156 ENG t English»»»  

>>> print (tekst)  

100 INFORMACIJE Informatika

213 MAT matematika  

156 ENG engleski

Za izvođenje željene operacije koristili smo sljedeće linije koda.

# zamijenite jedan ili više razmaka sa 1

>>> regex = re.compile('s+')  

>>> print(regex.sub(' ', tekst))  

Kao rezultat, imamo jednu liniju. 

101 COM Računari 205 MAT Matematika 189 ENG engleski

Sada razmotrite još jedan problem. Nismo suočeni sa zadatkom postavljanja prostora. Za nas je mnogo važnije da svi nazivi kurseva počinju na novom redu. Da biste to učinili, koristi se drugi izraz koji dodaje novi red izuzetku. Kakav je ovo izraz?

biblioteka Re podržava funkciju kao što je negativno podudaranje. Razlikuje se od direktnog po tome što sadrži uzvičnik ispred kose crte. To jest, ako trebamo preskočiti znak novog reda, onda trebamo napisati !n umjesto n.

Dobijamo sljedeći kod.

# uklonite sve razmake osim novog reda  

>>> regex = re.compile('((?!n)s+)')  

>>> print(regex.sub(' ', tekst))  

100 INF Informatika

213 MAT Matematika  

156 ENG engleski

Šta su grupe regularnih izraza?

Uz pomoć grupa regularnih izraza možemo dobiti željene objekte u obliku zasebnih elemenata, a ne u jednom redu. 

Pretpostavimo da trebamo dobiti broj predmeta, šifru i naziv ne u jednom redu, već kao zasebne elemente. Da biste dovršili zadatak, morat ćete napisati ogroman broj nepotrebnih linija koda. 

Zapravo, zadatak se može znatno pojednostaviti. Možete sastaviti šablon za sve unose i samo navesti podatke koje trebate dobiti iz zagrada.

Bit će vrlo mali broj linija. 

# kreirajte grupe tekstualnih šablona kursa i izvucite ih

>>> course_pattern = '([0-9]+)s*([A-ZY]{3})s*([a-zA-ZoY]{4,})'  

>>> re.findall(uzorak_coursa, tekst)  

[('100', 'INF', 'Informatika'), ('213', 'MAT', 'Matematika'), ('156', 'ENG', 'engleski')]

Koncept “pohlepnog” uparivanja

Po standardu, regularni izrazi su programirani da izvuku maksimalnu količinu podudarnih podataka. Pa čak i ako vam treba mnogo manje.

Pogledajmo uzorak HTML koda gdje trebamo dobiti oznaku.

>>> text = “Primjer pohlepnog podudaranja regularnog izraza”  

>>> re.findall('', tekst)  

['Primjer pohlepnog podudaranja regularnog izraza']

Umjesto da izdvoji samo jednu oznaku, Python je dobio cijeli niz. Zato se naziva pohlepnim.

I šta učiniti da dobijete samo oznaku? U ovom slučaju morate koristiti lijeno uparivanje. Da biste specificirali takav izraz, znak pitanja se dodaje na kraj obrasca.

Dobit ćete sljedeći kod i izlaz interpretatora.

>>> re.findall('', tekst)  

[”, ”]

Ako je potrebno dobiti samo prvo naišlo pojavljivanje, tada se koristi metoda traži ().

re.search('', text).group()  

"

Tada će se pronaći samo početna oznaka.

Popularni predlošci izraza

Evo tabele koja sadrži najčešće korišćene obrasce regularnih izraza.

Dokumentacija za Re modul za Python 3 u . Re modul za regularne izraze

zaključak

Razmotrili smo samo najosnovnije metode za rad sa regularnim izrazima. U svakom slučaju, vidjeli ste koliko su važni. I tu je svejedno da li je potrebno raščlaniti cijeli tekst ili njegove pojedinačne fragmente, da li je potrebno analizirati objavu na društvenoj mreži ili prikupiti podatke kako bi ih kasnije obradili. Regularni izrazi su pouzdan pomoćnik u ovom pitanju.

Oni vam omogućavaju da obavljate zadatke kao što su:

  1. Određivanje formata podataka, kao što je adresa e-pošte ili broj telefona.
  2. Dobivanje niza i cijepanje na nekoliko manjih žica.
  3. Obavljajte različite operacije s tekstom, kao što su pretraživanje, izdvajanje potrebnih informacija ili zamjena dijela znakova.

Regularni izrazi vam također omogućavaju da izvodite netrivijalne operacije. Na prvi pogled, savladavanje ove nauke nije lako. Ali u praksi je sve standardizirano, pa je dovoljno to jednom shvatiti, nakon čega se ovaj alat može koristiti ne samo u Pythonu, već iu bilo kojem drugom programskom jeziku. Čak i Excel koristi regularne izraze za automatizaciju obrade podataka. Dakle, grijeh je ne koristiti ovaj alat.

Ostavite odgovor