Python 3 Re mooduli dokumentatsioon in . Re moodul regulaaravaldiste jaoks

Regulaaravaldised on peaaegu iga programmeerimiskeele väga populaarne komponent. Need aitavad teil kiiresti vajaliku teabe juurde pääseda. Eelkõige kasutatakse neid siis, kui on vaja teksti töödelda. Pythonil on vaikimisi spetsiaalne moodul. re, mis vastutab regulaaravaldistega töötamise eest.

Täna räägime üksikasjalikult, mis see üldiselt on, kuidas nendega töötada ja kuidas moodul re aitab.

Regulaaravaldised: sissejuhatus

Mis on regulaaravaldiste kasutus? Peaaegu kõik. Näiteks need:

  1. Veebirakendused, mis nõuavad teksti kinnitamist. Tüüpiline näide on veebipõhised meilikliendid.
  2. Kõik muud projektid, mis on seotud tekstide, andmebaaside ja muuga.

Enne süntaksi parsimise alustamist peaksime üksikasjalikumalt mõistma raamatukogu toimimise põhiprintsiipe re ja üldiselt, mis selles üldiselt head on. Toome ka näiteid reaalsest praktikast, kus kirjeldame nende kasutamise mehhanismi. Saate luua sellise malli, mis sobib teile mitmesuguste tekstiga toimingute tegemiseks.

Mis on mall Re teegis?

Selle abil saate otsida erinevat tüüpi teavet, hankida neile vastavat teavet, et muuta muud funktsioonid kohanemisvõimelisemaks. Ja loomulikult nende andmete töötlemiseks.

Näiteks võtke järgmine mall: s+. See tähendab mis tahes tühikumärki. Kui lisate sellele plussmärgi, tähendab see, et muster sisaldab rohkem kui ühte tühikut. See võib isegi sobitada tabeldusmärke, millega kutsutakse t+.

Enne nende kasutamist peate teeki importima Re. Pärast seda kasutame malli koostamiseks spetsiaalset käsku. Seda tehakse kahes etapis.

>>> import re

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

Täpsemalt, see kood teostab kasutatava malli koostamise toimingu. näiteks tühikute otsimiseks (üks või mitu).

Erinevatest stringidest eraldi teabe hankimine regulaaravaldiste abil

Oletame, et meil on muutuja, mis sisaldab järgmist teavet.

>>> tekst = “””100 INF Informaatika

213 MAT Matemaatika  

156 EST Inglise»»»

See sisaldab kolme koolituskursust. Igaüks neist koosneb kolmest osast – number, kood ja nimi. Näeme, et nende sõnade vaheline intervall on erinev. Mida teha, et see rida eraldi numbriteks ja sõnadeks jagada? Selle eesmärgi saavutamiseks on kaks meetodit:

  1. funktsiooni kutsumine re.lõhestada.
  2. rakenda funktsiooni jagada eest regulaaravaldis.

Siin on näide meie muutuja iga meetodi süntaksi kasutamisest.

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

# või

>>> regex.split(text)

Väljund: ['100', 'INF', 'Arvutiteadus', '213', 'MAT', 'Math', '156', 'ENG', 'inglise keel']

Üldiselt saab kasutada mõlemat meetodit. Kuid tegelikult on palju lihtsam kasutada regulaaravaldist selle asemel, et seda funktsiooni mitu korda kasutada. re.lõhestada.

Kolme funktsiooniga vastete leidmine

Oletame, et peame stringist eraldama ainult arvud. Mida tuleb selleks teha?

re.findall()

Siin on funktsiooni kasutusjuht leia kõik(), mis koos regulaaravaldistega võimaldab teil tekstimuutujast eraldada ühe või mitme arvu esinemised.

>>> print (tekst)  

100 INF Informaatika

213 MAT Matemaatika  

156 EST Inglise keel

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

>>> regex_num.findall(text)  

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

Koos sümboliga d kasutasime malli, mis näitab absoluutselt kõiki muutujas või tekstis asuvaid arvväärtusi. Ja kuna lisasime sinna ühe +, tähendab see, et vähemalt üks number peab olema kohal. 

Võite kasutada ka märki *, et määrata, et vaste leidmiseks pole numbri olemasolu nõutav.

Kuid meie puhul, kuna kasutasime +, ekstraheerisime koos leia kõik() 1 või enam kursuste digitaalset tähistust tekstist. Seega toimivad meie puhul regulaaravaldised funktsiooni seadetena.

re.search() vs re.match()

Nagu funktsioonide nimedest aimata, otsib esimene vaste tekstist. Küsimus: Mis vahe on leiad kõik? Asi on selles, et see tagastab konkreetse objekti, mis vastab mustrile, mitte aga kogu leitud tulemuste jada loendi kujul, nagu eelmine funktsioon.

Sama teeb omakorda funktsioon re.match. Ainult süntaks on erinev. Mall tuleb panna algusesse. 

Toome näite, mis seda demonstreerib.

>>> # loo tekstiga muutuja

>>> text2 = «»»INF Informaatika

213 MAT matemaatika 156″»»  

>>> # koostage regex ja otsige mustreid

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

>>> s = regex_num.search(text2)  

>>> print('Esimene register:', s.start())  

>>> print('Viimane register:', s.end())  

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

Esimene indeks: 17 

Viimane indeks: 20

213

Kui soovite saada sarnast tulemust erineval viisil, võite kasutada funktsiooni Grupp().

Tekstiosa asendamine Re teegiga

Teksti asendamiseks kasutage funktsiooni re.sub(). Oletame, et meie kursuste nimekiri on veidi muutunud. Näeme, et iga digitaalse väärtuse järel on vahekaart. Meie ülesanne on ühendada kogu see jada üheks reale. Selleks peame asendama avaldise s+ mööduma 

Algne tekst oli:

# loo tekstiga muutuja

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

213 MAT t matemaatika  

156 EST t inglise keel»»»  

>>> print (tekst)  

100 TEAVE Arvutiteadus

213 XNUMX XNUMX MAT Matemaatika  

156 EST Inglise

Soovitud toimingu tegemiseks kasutasime järgmisi koodiridu.

# asendage üks või mitu tühikut 1-ga

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

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

Selle tulemusena on meil üks rida. 

101 COM Arvutid 205 MAT Matemaatika 189 EST Inglise keel

Nüüd kaaluge teist probleemi. Me ei seisa silmitsi tühikute paigutamise ülesandega. Meie jaoks on palju olulisem, et kõik kursuste nimetused algaksid uuelt realt. Selleks kasutatakse teist avaldist, mis lisab erandile reavahetuse. Mis väljend see selline on?

Raamatukogu Re toetab sellist funktsiooni nagu negatiivne sobitamine. See erineb otsesest selle poolest, et sisaldab kaldkriipsu ees hüüumärki. See tähendab, et kui peame reavahetuse märki vahele jätma, peame n asemel kirjutama !n.

Saame järgmise koodi.

# eemaldage kõik tühikud, välja arvatud reavahetus  

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

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

100 INF Informaatika

213 MAT Matemaatika  

156 EST Inglise keel

Mis on regulaaravaldiste rühmad?

Regulaaravaldiste rühmade abil saame soovitud objektid eraldi elementidena, mitte ühe rea kaupa. 

Oletame, et peame saama kursuse numbri, koodi ja nime mitte ühel real, vaid eraldi elementidena. Ülesande täitmiseks peate kirjutama tohutul hulgal mittevajalikke koodiridu. 

Tegelikult saab ülesannet oluliselt lihtsustada. Saate koostada malli kõigi kirjete jaoks ja lihtsalt määrata andmed, mida sulgudest saada on vaja.

Ridade arv on väga väike. 

# looge kursuse tekstimallide rühmad ja eraldage need

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

>>> re.findall(kursuse_muster, tekst)  

[('100', 'INF', 'Arvutiteadus'), ('213', 'MAT', 'Math'), ('156', 'ENG', 'inglise keel)]

Mõiste "ahne" sobitamine

Tavapäraselt on regulaaravaldised programmeeritud eraldama maksimaalselt sobivaid andmeid. Ja isegi kui vajate palju vähem.

Vaatame HTML-koodi näidist, kust peame märgendi hankima.

>>> text = "Ahne regulaaravaldise sobitamise näide"  

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

['Ahne regulaaravaldise sobitamise näide']

Selle asemel, et ekstraheerida ainult üks silt, sai Python kogu stringi. Sellepärast nimetatakse seda ahneks.

Ja mida teha, et saada ainult silt? Sel juhul peate kasutama laiska sobitamist. Sellise väljendi täpsustamiseks lisatakse mustri lõppu küsimärk.

Saate järgmise koodi ja tõlgi väljundi.

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

[”, ”]

Kui on vaja hankida ainult esimene esinemine, kasutatakse meetodit otsing ().

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

"

Siis leitakse ainult avasilt.

Populaarsed väljendimallid

Siin on tabel, mis sisaldab kõige sagedamini kasutatavaid regulaaravaldise mustreid.

Python 3 Re mooduli dokumentatsioon in . Re moodul regulaaravaldiste jaoks

Järeldus

Oleme kaalunud ainult kõige põhilisemaid meetodeid regulaaravaldistega töötamiseks. Igal juhul olete näinud, kui olulised need on. Ja siin pole vahet, kas on vaja sõeluda tervet teksti või selle üksikuid fragmente, kas on vaja analüüsida postitust sotsiaalvõrgustikus või koguda andmeid, et seda hiljem töödelda. Regulaaravaldised on selles küsimuses usaldusväärseks abimeheks.

Need võimaldavad teil täita selliseid ülesandeid nagu:

  1. Andmete vormingu (nt e-posti aadress või telefoninumber) määramine.
  2. Stringi hankimine ja selle jagamine mitmeks väiksemaks stringiks.
  3. Tehke tekstiga erinevaid toiminguid, näiteks otsige, eraldage vajalik teave või asendage osa tähemärke.

Regulaaravaldised võimaldavad teha ka mittetriviaalseid toiminguid. Esmapilgul pole selle teaduse omandamine lihtne. Kuid praktikas on kõik standarditud, nii et piisab sellest, kui see üks kord välja mõelda, pärast mida saab seda tööriista kasutada mitte ainult Pythonis, vaid ka mis tahes muus programmeerimiskeeles. Isegi Excel kasutab andmetöötluse automatiseerimiseks regulaaravaldisi. Seega on patt seda tööriista mitte kasutada.

Jäta vastus