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

Regularni izrazi so zelo priljubljena komponenta skoraj vsakega programskega jezika. Pomagajo vam hitro dostopati do informacij, ki jih potrebujete. Še posebej se uporabljajo, ko je treba obdelati besedilo. Python je privzeto opremljen s posebnim modulom. re, ki je odgovoren za delo z regularnimi izrazi.

Danes bomo podrobno govorili o tem, kaj na splošno je, kako delati z njimi in kako modul re bo pomagal.

Regularni izrazi: uvod

Kakšne so uporabe regularnih izrazov? Skoraj vsi. Na primer te:

  1. Spletne aplikacije, ki zahtevajo preverjanje besedila. Tipičen primer so spletni poštni odjemalci.
  2. Vsi drugi projekti, povezani z besedili, bazami podatkov itd.

Preden začnemo razčlenjevati sintakso, bi morali podrobneje razumeti osnovna načela delovanja knjižnice re in na splošno, kaj je na splošno dobrega. Navedli bomo tudi primere iz realne prakse, kjer bomo opisali mehanizem njihove uporabe. Ustvarite lahko takšno predlogo, primerno za izvajanje najrazličnejših operacij z besedilom.

Kaj je predloga v knjižnici Re?

Z njim lahko iščete informacije različnih vrst, pridobite informacije, ki jim ustrezajo, da naredite druge funkcije bolj prilagodljive. In seveda obdelati te podatke.

Na primer, vzemite naslednjo predlogo: s+. Pomeni poljuben presledek. Če mu dodate znak plus, potem to pomeni, da vzorec vključuje več kot en presledek. Lahko celo ujema tabulatorske znake, ki so klicani z t+.

Preden jih uporabite, morate uvoziti knjižnico Re. Nato s posebnim ukazom prevedemo predlogo. To se naredi v dveh korakih.

>>> uvoz re

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

Natančneje, ta koda izvede operacijo sestavljanja predloge, ki jo je mogoče uporabiti. na primer za iskanje presledkov (enega ali več).

Pridobivanje ločenih informacij iz različnih nizov z uporabo regularnih izrazov

Recimo, da imamo spremenljivko, ki vsebuje naslednje informacije.

>>> besedilo = “””100 INF Informatika

213 MAT Matematika  

156 ENG angleški»»»

Vsebuje tri tečaje usposabljanja. Vsak od njih je sestavljen iz treh delov – številke, kode in imena. Vidimo, da je interval med temi besedami različen. Kaj storiti, da to vrstico razdelimo na ločene številke in besede? Ta cilj lahko dosežete na dva načina:

  1. pokličite funkcijo ponovno razdeliti.
  2. uporabite funkcijo po delih za regularni izraz.

Tukaj je primer uporabe sintakse vsake od metod za našo spremenljivko.

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

# ali

>>> regex.split(besedilo)

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

Na splošno se lahko uporabita obe metodi. Toda v resnici je veliko lažje uporabiti regularni izraz namesto večkratne uporabe funkcije. ponovno razdeliti.

Iskanje ujemanj s tremi funkcijami

Recimo, da moramo iz niza izluščiti samo števila. Kaj je treba narediti za to?

re.findall()

Tukaj je primer uporabe funkcije findall(), ki vam skupaj z regularnimi izrazi omogoča, da iz besedilne spremenljivke izvlečete pojavitve enega ali več števil.

>>> natisni (besedilo)  

100 INF Informatika

213 MAT Matematika  

156 SLO Angleščina

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

>>> regex_num.findall(besedilo)  

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

Skupaj s simbolom d smo uporabili predlogo, ki označuje absolutno vsako številsko vrednost, ki se nahaja v spremenljivki ali besedilu. In ker smo tam dodali en +, to pomeni, da mora biti prisotna vsaj ena številka. 

Uporabite lahko tudi znak *, da določite, da prisotnost števke ni potrebna za iskanje ujemanja.

Toda v našem primeru, ker smo uporabili +, smo ekstrahirali z findall() 1 ali več digitalnih oznak tečajev iz besedila. Tako v našem primeru regularni izrazi delujejo kot nastavitve za funkcijo.

re.search() vs re.match()

Kot lahko uganete iz imena funkcij, prva išče ujemanje v besedilu. Vprašanje: Kakšna je razlika med findall? Gre za to, da vrne določen objekt, ki se ujema z vzorcem, in ne celotnega zaporedja najdenih rezultatov v obliki seznama, kot prejšnja funkcija.

Po drugi strani funkcija re.match naredi enako. Samo sintaksa je drugačna. Predlogo je treba postaviti na začetek. 

Vzemimo primer, ki to dokazuje.

>>> # ustvarite spremenljivko z besedilom

>>> text2 = «»»INF Informatika

213 MAT Matematika 156″»»  

>>> # prevedite regularni izraz in poiščite vzorce

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

>>> s = regex_num.search(text2)  

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

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

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

Prvi indeks: 17 

Zadnji indeks: 20

213

Če želite dobiti podoben rezultat na drugačen način, lahko uporabite funkcijo skupina ().

Zamenjava dela besedila s knjižnico Re

Za zamenjavo besedila uporabite funkcijo re.sub(). Recimo, da se je naš seznam tečajev nekoliko spremenil. Vidimo, da imamo za vsako digitalno vrednostjo zavihek. Naša naloga je združiti vse to zaporedje v eno vrstico. Za to moramo zamenjati izraz s+ prenesti 

Prvotno besedilo je bilo:

# ustvarite spremenljivko z besedilom

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

213 MAT t Math  

156 ENG t angleški»»»  

>>> natisni (besedilo)  

100 INFO Informatika

213 MAT Matematika  

156 ENG Angleščina

Za izvedbo želene operacije smo uporabili naslednje vrstice kode.

# zamenjajte enega ali več presledkov z 1

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

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

Kot rezultat, imamo eno vrstico. 

101 COM Computers 205 MAT Matematika 189 ENG Angleščina

Zdaj razmislite o drugem problemu. Ne soočamo se z nalogo postavljanja presledkov. Za nas je veliko bolj pomembno, da se vsa imena tečajev začnejo v novi vrstici. Za to se uporabi drug izraz, ki izjemi doda novo vrstico. Kakšno izražanje je to?

Knjižnica Re podpira funkcijo, kot je negativno ujemanje. Od neposrednega se razlikuje po tem, da vsebuje klicaj pred poševnico. To pomeni, če moramo preskočiti znak za novo vrstico, potem moramo napisati !n namesto n.

Dobimo naslednjo kodo.

# odstranite vse presledke razen nove vrstice  

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

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

100 INF Informatika

213 MAT Matematika  

156 SLO Angleščina

Kaj so skupine regularnih izrazov?

S pomočjo skupin regularnih izrazov lahko dobimo želene objekte v obliki ločenih elementov in ne v eni vrstici. 

Recimo, da moramo dobiti številko tečaja, kodo in ime ne v eni vrstici, ampak kot ločene elemente. Za dokončanje naloge boste morali napisati ogromno število nepotrebnih vrstic kode. 

Pravzaprav je nalogo mogoče močno poenostaviti. Predlogo lahko sestavite za vse vnose in samo določite podatke, ki jih morate pridobiti iz oklepajev.

Število vrstic bo zelo majhno. 

# ustvarite skupine besedilnih predlog tečajev in jih ekstrahirajte

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

>>> re.findall(vzorec_tečaja, besedilo)  

[('100', 'INF', 'Computer Science'), ('213', 'MAT', 'Math'), ('156', 'ENG', 'English')]

Koncept "pohlepnega" ujemanja

Po standardu so regularni izrazi programirani tako, da izvlečejo največjo količino ujemajočih se podatkov. In tudi če potrebujete veliko manj.

Oglejmo si vzorec kode HTML, kjer moramo dobiti oznako.

>>> besedilo = “Primer pohlepnega ujemanja regularnega izraza”  

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

['Primer ujemanja pohlepnega regularnega izraza']

Namesto ekstrahiranja samo ene oznake je Python dobil celoten niz. Zato se imenuje požrešen.

In kaj narediti, da dobiš samo oznako? V tem primeru morate uporabiti leno ujemanje. Za določitev takega izraza je na koncu vzorca dodan vprašaj.

Dobili boste naslednjo kodo in izhod tolmača.

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

[”, ”]

Če je potrebno pridobiti samo prvo najdeno pojavitev, se uporabi metoda Iskanje ().

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

"

Nato bo najdena samo začetna oznaka.

Priljubljene izrazne predloge

Tukaj je tabela, ki vsebuje najpogosteje uporabljene vzorce regularnih izrazov.

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

zaključek

Upoštevali smo le najosnovnejše metode za delo z regularnimi izrazi. V vsakem primeru ste videli, kako pomembni so. In tukaj ni pomembno, ali je treba razčleniti celotno besedilo ali njegove posamezne fragmente, ali je treba analizirati objavo na družbenem omrežju ali zbrati podatke za kasnejšo obdelavo. Regularni izrazi so zanesljiv pomočnik pri tej zadevi.

Omogočajo vam opravljanje nalog, kot so:

  1. Določanje oblike podatkov, kot je e-poštni naslov ali telefonska številka.
  2. Pridobivanje niza in njegovo razdelitev na več manjših nizov.
  3. Izvedite različne operacije z besedilom, kot je iskanje, pridobivanje potrebnih informacij ali zamenjava dela znakov.

Regularni izrazi vam omogočajo tudi izvajanje netrivialnih operacij. Na prvi pogled obvladovanje te znanosti ni enostavno. Toda v praksi je vse standardizirano, zato je dovolj, da to enkrat ugotovite, potem pa se to orodje lahko uporablja ne samo v Pythonu, ampak tudi v katerem koli drugem programskem jeziku. Tudi Excel uporablja regularne izraze za avtomatizacijo obdelave podatkov. Zato je greh ne uporabiti tega orodja.

Pustite Odgovori