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

Regularni izrazi vrlo su popularna komponenta gotovo svakog programskog jezika. Pomažu vam da brzo dođete do informacija koje trebate. Konkretno, koriste se kada je potrebno obraditi tekst. Python standardno dolazi s posebnim modulom. re, koji je odgovoran za rad s regularnim izrazima.

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

Regularni izrazi: uvod

Koje su upotrebe regularnih izraza? Gotovo sve. Na primjer, ove:

  1. Web aplikacije koje zahtijevaju provjeru valjanosti teksta. Tipičan primjer su online mail klijenti.
  2. Bilo koji drugi projekti vezani uz tekstove, baze podataka i tako dalje.

Prije nego počnemo analizirati sintaksu, trebali bismo detaljnije razumjeti osnovne principe funkcioniranja knjižnice re i općenito, što je općenito dobro u tome. Navest ćemo i primjere iz stvarne prakse, gdje ćemo opisati mehanizam njihove upotrebe. Možete stvoriti takav predložak, prikladan za izvođenje širokog spektra operacija s tekstom.

Što je predložak u biblioteci Re?

Pomoću njega možete tražiti informacije različitih vrsta, dobiti informacije koje im odgovaraju, kako bi ostale funkcije bile prilagodljivije. I, naravno, obraditi te podatke.

Na primjer, uzmite sljedeći predložak: s+. Označava bilo koji razmak. Ako mu dodate znak plus, to znači da uzorak uključuje više od jednog razmaka. Može čak i podudarati znakove tab koji se pozivaju s t+.

Prije njihove upotrebe morate uvesti biblioteku Re. Nakon toga koristimo posebnu naredbu za kompajliranje predloška. To se radi u dva koraka.

>>> uvoz re

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

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

Dobivanje zasebnih informacija iz različitih nizova pomoću regularnih izraza

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

>>> tekst = “””100 INF Informatika

213 MAT Matematika  

156 ENG engleski»»»

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

  1. poziv funkcije ponovno.split.
  2. primijeniti funkciju Split za Regularni izraz.

Ovdje je primjer korištenja sintakse svake od metoda za našu varijablu.

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

# ili

>>> regex.split(tekst)

Izlaz: ['100', 'INF', 'Computer Science', '213', 'MAT', 'Math', '156', 'ENG', 'English']

Općenito se mogu koristiti obje metode. Ali zapravo je mnogo lakše koristiti regularni izraz umjesto višestrukog korištenja funkcije. ponovno.split.

Pronalaženje podudaranja s tri funkcije

Recimo da trebamo izdvojiti samo brojeve iz niza. Što za to treba učiniti?

re.findall()

Ovdje je slučaj upotrebe funkcije pronaći sve (), koji vam, zajedno s regularnim izrazima, omogućuje 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 predložak koji označava apsolutno bilo koju brojčanu vrijednost koja se nalazi u varijabli ili tekstu. A budući da smo tamo dodali jedan +, to znači da mora biti prisutan barem jedan broj. 

Također možete koristiti znak * kako biste odredili da prisutnost znamenke nije potrebna za pronalaženje podudaranja.

Ali u našem slučaju, budući da smo koristili +, izdvajali smo s pronaći sve () 1 ili više digitalnih oznaka kolegija iz teksta. Dakle, u našem slučaju, regularni izrazi djeluju kao postavke za funkciju.

re.search() vs re.match()

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

S druge strane, funkcija re.match radi isto. Samo je sintaksa drugačija. Predložak mora biti postavljen na početku. 

Uzmimo primjer koji to pokazuje.

>>> # kreirajte varijablu s tekstom

>>> tekst2 = «»»INF Informatika

213 MAT Matematika 156″»»  

>>> # kompajlirajte regex i tražite uzorke

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

>>> s = regex_num.search(text2)  

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

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

>>> ispis(tekst2[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 skupina().

Zamjena dijela teksta bibliotekom Re

Za zamjenu teksta koristite funkciju re.sub(). Pretpostavimo da se naš popis tečajeva malo promijenio. Vidimo da nakon svake digitalne vrijednosti imamo karticu. Naš zadatak je kombinirati 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 engleski»»»  

>>> print(tekst)  

100 INFO Informatika

213 MAT Matematika  

156 HRV Engleski

Za izvođenje željene operacije upotrijebili smo sljedeće retke koda.

# zamijenite jedan ili više razmaka s 1

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

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

Kao rezultat toga, imamo jednu liniju. 

101 COM Computers 205 MAT Matematika 189 ENG Engleski jezik

Sada razmotrite drugi problem. Nismo suočeni sa zadatkom postavljanja razmaka. Puno nam je važnije da nazivi svih tečajeva počinju u novom redu. Da biste to učinili, koristi se drugi izraz koji iznimci dodaje novi redak. Kakav je ovo izraz?

Knjižnica Re podržava značajku kao što je negativno podudaranje. Razlikuje se od izravnog po tome što sadrži uskličnik prije kose crte. To jest, ako trebamo preskočiti znak novog retka, tada trebamo napisati !n umjesto n.

Dobivamo sljedeći kod.

# uklonite sve razmake osim novog retka  

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

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

100 INF Informatika

213 MAT Matematika  

156 ENG engleski

Što su grupe regularnih izraza?

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

Pretpostavimo da moramo dobiti broj tečaja, šifru i naziv ne u jednom retku, već kao zasebne elemente. Da biste izvršili zadatak, morat ćete napisati ogroman broj nepotrebnih redaka koda. 

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

Bit će vrlo mali broj linija. 

# kreirajte grupe predložaka teksta tečaja i ekstrahirajte ih

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

>>> re.findall(uzorak_tečaja, tekst)  

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

Koncept "pohlepnog" sparivanja

Prema standardu, regularni izrazi programirani su za izdvajanje maksimalne količine podudarnih podataka. Čak i ako vam treba mnogo manje.

Pogledajmo primjer HTML koda gdje trebamo dobiti oznaku.

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

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

['Primjer pohlepnog podudaranja regularnog izraza']

Umjesto izdvajanja samo jedne oznake, Python je dobio cijeli niz. Zato se naziva pohlepnim.

I što učiniti da dobijete samo oznaku? U ovom slučaju morate koristiti lijeno podudaranje. Kako bi se odredio takav izraz, upitnik se dodaje na kraj uzorka.

Dobit ćete sljedeći kod i izlaz tumača.

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

[”, ”]

Ako je potrebno dobiti samo prvo nađeno pojavljivanje, tada se koristi metoda traži ().

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

"

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

Popularni predlošci izraza

Ovdje je tablica koja sadrži najčešće korištene 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 s regularnim izrazima. U svakom slučaju, vidjeli ste koliko su važni. I ovdje je svejedno je li potrebno analizirati cijeli tekst ili njegove pojedinačne fragmente, je li potrebno analizirati objavu na društvenoj mreži ili prikupiti podatke kako bi se kasnije obradili. Regularni izrazi pouzdani su pomoćnici u ovom pitanju.

Omogućuju vam obavljanje zadataka kao što su:

  1. Određivanje formata podataka, kao što je adresa e-pošte ili telefonski broj.
  2. Dobivanje niza i njegovo dijeljenje na nekoliko manjih nizova.
  3. Izvršite razne radnje s tekstom, poput pretraživanja, izdvajanja potrebnih informacija ili zamjene dijela znakova.

Regularni izrazi također vam omogućuju izvođenje netrivijalnih operacija. Na prvi pogled, svladavanje ove znanosti nije lako. Ali u praksi je sve standardizirano, pa je dovoljno 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. Stoga je grijeh ne koristiti ovaj alat.

Ostavi odgovor