„Re“ modulio, skirto „Python 3“, dokumentacija. Re modulis reguliariosioms išraiškoms

Reguliarios išraiškos yra labai populiarus beveik bet kurios programavimo kalbos komponentas. Jie padeda greitai pasiekti reikiamą informaciją. Visų pirma, jie naudojami, kai reikia apdoroti tekstą. Pagal numatytuosius nustatymus „Python“ yra su specialiu moduliu. re, kuri yra atsakinga už darbą su reguliariosiomis išraiškomis.

Šiandien mes išsamiai kalbėsime apie tai, kas tai yra apskritai, kaip su jais dirbti ir kaip modulis re pades.

Reguliarūs posakiai: įvadas

Kam naudojamos reguliarios išraiškos? Beveik visi. Pavyzdžiui, šie:

  1. Žiniatinklio programos, kurioms reikalingas teksto patvirtinimas. Tipiškas pavyzdys yra internetinės pašto programos.
  2. Bet kokie kiti projektai, susiję su tekstais, duomenų bazėmis ir pan.

Prieš pradėdami analizuoti sintaksę, turėtume išsamiau suprasti pagrindinius bibliotekos veikimo principus re ir apskritai, kas jame apskritai yra gero. Taip pat pateiksime pavyzdžių iš realios praktikos, kur apibūdinsime jų panaudojimo mechanizmą. Galite sukurti tokį šabloną, tinkantį atlikti įvairiausias operacijas su tekstu.

Kas yra Re bibliotekos šablonas?

Su juo galima ieškoti įvairaus tipo informacijos, gauti ją atitinkančią informaciją, kad kitos funkcijos būtų labiau pritaikomos. Ir, žinoma, apdoroti šiuos duomenis.

Pavyzdžiui, paimkite šį šabloną: s+. Tai reiškia bet kokį tarpo simbolį. Jei prie jo pridėsite pliuso ženklą, tai reiškia, kad šablone yra daugiau nei vienas tarpas. Jis netgi gali atitikti skirtukų simbolius, kurie iškviečiami t+.

Prieš naudodami juos, turite importuoti biblioteką Re. Po to šablonui sudaryti naudojame specialią komandą. Tai atliekama dviem etapais.

>>> importuoti re

>>> reguliarusis reiškinys = re.compile('s+')

Tiksliau, šis kodas atlieka šablono, kurį galima naudoti, sudarymo operaciją. pavyzdžiui, ieškoti tarpų (vieno ar kelių).

Atskiros informacijos gavimas iš skirtingų eilučių naudojant įprastus posakius

Tarkime, kad turime kintamąjį su tokia informacija.

>>> tekstas = “””100 INF Informatika

213 MAT Matematika  

156 LIT Anglų »»»

Jį sudaro trys mokymo kursai. Kiekviena jų susideda iš trijų dalių – numerio, kodo ir pavadinimo. Matome, kad intervalas tarp šių žodžių skiriasi. Ką daryti, norint suskaidyti šią eilutę į atskirus skaičius ir žodžius? Yra du būdai pasiekti šį tikslą:

  1. iškviesti funkciją per.skilti.
  2. taikyti funkciją skilimas forumas reguliariai.

Čia yra kiekvieno mūsų kintamojo metodo sintaksės naudojimo pavyzdys.

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

# arba

>>> regex.split(tekstas)

Išvestis: ['100', 'INF', 'Computer Science', '213', 'MAT', 'Math', '156', 'ENG', 'English']

Apskritai galima naudoti abu metodus. Tačiau iš tikrųjų daug lengviau naudoti reguliarųjį posakį, o ne naudoti funkciją kelis kartus. per.skilti.

Rasti atitikmenis su trimis funkcijomis

Tarkime, kad iš eilutės reikia išskirti tik skaičius. Ką reikia padaryti dėl to?

re.findall()

Čia yra šios funkcijos naudojimo atvejis rasti viską (), kuri kartu su reguliariosiomis išraiškomis leidžia iš teksto kintamojo išgauti vieno ar daugiau skaičių atvejų.

>>> spausdinti (tekstas)  

100 INF Informatika

213 MAT Matematika  

156 LIT Anglų k

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

>>> regex_num.findall(text)  

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

Kartu su simboliu d naudojome šabloną, kuris nurodo absoliučiai bet kokią skaitinę reikšmę, esančią kintamajame arba tekste. Ir kadangi mes ten pridėjome vieną +, tai reiškia, kad turi būti bent vienas skaičius. 

Taip pat galite naudoti ženklą *, norėdami nurodyti, kad norint rasti atitiktį nebūtina turėti skaitmens.

Bet mūsų atveju, kadangi naudojome +, išgaudavome su rasti viską () 1 ar daugiau skaitmeninių kursų pavadinimų iš teksto. Taigi mūsų atveju reguliarios išraiškos veikia kaip funkcijos nustatymai.

re.search() vs re.match()

Kaip galima atspėti iš funkcijų pavadinimo, pirmasis ieško atitikmens tekste. Klausimas: koks skirtumas tarp rasti viska? Esmė ta, kad jis pateikia konkretų objektą, atitinkantį šabloną, o ne visą rastų rezultatų seką sąrašo forma, kaip ir ankstesnė funkcija.

Savo ruožtu tą patį daro ir re.match funkcija. Tik sintaksė skiriasi. Šablonas turi būti dedamas pradžioje. 

Paimkime tai įrodantį pavyzdį.

>>> # sukurti kintamąjį su tekstu

>>> text2 = «»»INF Informatika

213 MAT Matematika 156″»»  

>>> # sudarykite reguliarųjį reiškinį ir ieškokite šablonų

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

>>> s = regex_num.search(text2)  

>>> print('Pirmasis indeksas:', s.start())  

>>> print('Paskutinis indeksas:', s.end())  

>>> spausdinti(tekstas2[s.start():s.end()]) 

Pirmasis indeksas: 17 

Paskutinis indeksas: 20

213

Jei norite gauti panašų rezultatą kitu būdu, galite naudoti funkciją grupė ().

Dalies teksto pakeitimas Re biblioteka

Norėdami pakeisti tekstą, naudokite funkciją re.sub(). Tarkime, kad mūsų kursų sąrašas šiek tiek pasikeitė. Matome, kad po kiekvienos skaitmeninės reikšmės turime skirtuką. Mūsų užduotis yra sujungti visą šią seką į vieną eilutę. Norėdami tai padaryti, turime pakeisti išraišką s+ praeiti 

Originalus tekstas buvo:

# sukurti kintamąjį su tekstu

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

213 MAT t matematika  

156 LIT t anglų k.»»»  

>>> spausdinti (tekstas)  

100 INFORMACIJA Kompiuterių mokslas

213 XNUMX XNUMX MAT Matematika  

156 LIT anglų

Norėdami atlikti norimą operaciją, naudojome šias kodo eilutes.

# vieną ar daugiau tarpų pakeiskite 1

>>> reguliarusis reiškinys = re.compile('s+')  

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

Dėl to turime vieną eilutę. 

101 COM Kompiuteriai 205 MAT Matematika 189 ENG Anglų kalba

Dabar apsvarstykite kitą problemą. Mes nesusiduriame su užduotimi išdėstyti tarpus. Mums daug svarbiau, kad visi kursų pavadinimai prasidėtų nauja eilute. Norėdami tai padaryti, naudojama kita išraiška, kuri prideda naują eilutę prie išimties. Kokia tai išraiška?

Biblioteka Re palaiko tokią funkciją kaip neigiamas atitikimas. Jis skiriasi nuo tiesioginio tuo, kad prieš pasvirąjį brūkšnį yra šauktukas. Tai yra, jei reikia praleisti naujos eilutės simbolį, vietoj n turime rašyti !n.

Gauname tokį kodą.

# pašalinti visus tarpus, išskyrus naują eilutę  

>>> reguliarusis reiškinys = re.compile('(?!n)s+)')  

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

100 INF Informatika

213 MAT Matematika  

156 LIT Anglų k

Kas yra reguliariųjų reiškinių grupės?

Reguliariųjų reiškinių grupių pagalba norimus objektus galime gauti atskirų elementų pavidalu, o ne vienoje eilutėje. 

Tarkime, kurso numerį, kodą ir pavadinimą turime gauti ne vienoje eilutėje, o kaip atskirus elementus. Norėdami atlikti užduotį, turėsite parašyti daugybę nereikalingų kodo eilučių. 

Tiesą sakant, užduotis gali būti labai supaprastinta. Galite sudaryti visų įrašų šabloną ir tiesiog nurodyti duomenis, kuriuos reikia gauti iš skliaustų.

Bus labai mažai eilučių. 

# sukurkite kurso teksto šablonų grupes ir jas išskleiskite

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

>>> re.findall(kurso_modelis, tekstas)  

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

„Gobslaus“ atitikimo sąvoka

Standartiškai reguliarios išraiškos yra užprogramuotos taip, kad išgautų maksimalų atitikimo duomenų kiekį. Ir net jei jums reikia daug mažiau.

Pažvelkime į HTML kodo pavyzdį, kuriame turime gauti žymą.

>>> tekstas = "Godbios reguliariųjų reiškinių atitikties pavyzdys"  

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

["Godbios reguliariųjų reiškinių atitikties pavyzdys"]

Užuot ištraukęs tik vieną žymą, Python gavo visą eilutę. Štai kodėl jis vadinamas gobšu.

O ką daryti, kad gautum tik etiketę? Tokiu atveju reikia naudoti tingų derinimą. Norint nurodyti tokią išraišką, modelio pabaigoje pridedamas klaustukas.

Gausite šį kodą ir vertėjo išvestį.

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

[”, ”]

Jei reikia gauti tik pirmą pasitaikiusį įvykį, tada naudojamas metodas Paieška ().

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

"

Tada bus rasta tik pradinė žyma.

Populiarūs išraiškų šablonai

Čia yra lentelė, kurioje pateikiami dažniausiai naudojami reguliariųjų reiškinių modeliai.

„Re“ modulio, skirto „Python 3“, dokumentacija. Re modulis reguliariosioms išraiškoms

Išvada

Mes apsvarstėme tik pagrindinius darbo su reguliariosiomis išraiškomis metodus. Bet kokiu atveju jūs matėte, kokie jie svarbūs. Ir čia nėra jokio skirtumo, ar reikia analizuoti visą tekstą ar atskirus jo fragmentus, ar reikia analizuoti įrašą socialiniame tinkle, ar rinkti duomenis, kad vėliau būtų galima jį apdoroti. Reguliarūs posakiai yra patikimas pagalbininkas šiuo klausimu.

Jie leidžia atlikti tokias užduotis kaip:

  1. Nurodykite duomenų formatą, pvz., el. pašto adresą arba telefono numerį.
  2. Gauti eilutę ir padalinti ją į kelias mažesnes eilutes.
  3. Atlikite įvairias operacijas su tekstu, pavyzdžiui, ieškokite, ištraukite reikiamą informaciją ar pakeiskite dalį simbolių.

Reguliarios išraiškos taip pat leidžia atlikti nereikšmingas operacijas. Iš pirmo žvilgsnio įvaldyti šį mokslą nėra lengva. Tačiau praktikoje viskas yra standartizuota, todėl užtenka vieną kartą išsiaiškinti, o po to šis įrankis gali būti naudojamas ne tik Python, bet ir bet kuria kita programavimo kalba. Net „Excel“ naudoja reguliariąsias išraiškas duomenų apdorojimui automatizuoti. Taigi nuodėmė nesinaudoti šia priemone.

Palikti atsakymą