Dokumentacioni për modulin Re për Python 3 në. Moduli i ri për shprehje të rregullta

Shprehjet e rregullta janë një komponent shumë i njohur i pothuajse çdo gjuhe programimi. Ato ju ndihmojnë të aksesoni shpejt informacionin që ju nevojitet. Në veçanti, ato përdoren kur është e nevojshme të përpunohet teksti. Python vjen me një modul të veçantë si parazgjedhje. re, e cila është përgjegjëse për punën me shprehje të rregullta.

Sot do të flasim në detaje se çfarë është në përgjithësi, si të punohet me ta dhe si moduli re do të ndihmojë.

Shprehje të rregullta: një hyrje

Cilat janë përdorimet e shprehjeve të rregullta? Pothuajse te gjitha. Për shembull, këto:

  1. Ueb aplikacione që kërkojnë vërtetim teksti. Një shembull tipik janë klientët e postës në internet.
  2. Çdo projekt tjetër që lidhet me tekstet, bazat e të dhënave etj.

Para se të fillojmë analizimin e sintaksës, duhet të kuptojmë më në detaje parimet themelore të funksionimit të bibliotekës. re dhe në përgjithësi, çfarë është përgjithësisht e mirë për të. Do të japim edhe shembuj nga praktika reale, ku do të përshkruajmë mekanizmin e përdorimit të tyre. Ju mund të krijoni një shabllon të tillë, të përshtatshëm për ju për të kryer një shumëllojshmëri të gjerë operacionesh me tekst.

Çfarë është një shabllon në bibliotekën Re?

Me të, ju mund të kërkoni informacione të llojeve të ndryshme, të merrni informacione që korrespondojnë me to, në mënyrë që të bëni funksione të tjera më përshtatëse. Dhe, natyrisht, për të përpunuar këto të dhëna.

Për shembull, merrni shabllonin e mëposhtëm: s+. Do të thotë çdo karakter hapësinor. Nëse i shtoni një shenjë plus, atëherë kjo do të thotë që modeli përfshin më shumë se një hapësirë. Ai madje mund të përputhet me karakteret e skedës që thirren t+.

Para se t'i përdorni ato, duhet të importoni bibliotekën Re. Pas kësaj, ne përdorim një komandë të veçantë për të përpiluar shabllonin. Kjo bëhet në dy hapa.

>>> import re

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

Konkretisht, ky kod kryen operacionin e përpilimit të një shablloni që mund të përdoret. për shembull, për të kërkuar hapësira (një ose më shumë).

Marrja e informacionit të veçantë nga vargje të ndryshme duke përdorur shprehje të rregullta

Supozoni se kemi një variabël që përmban informacionin e mëposhtëm.

>>> text = “””100 INF Informatikë

213 MAT Matematikë  

156 ALB Anglisht»»»

Ai përmban tre kurse trajnimi. Secila prej tyre përbëhet nga tre pjesë - numri, kodi dhe emri. Ne shohim se intervali midis këtyre fjalëve është i ndryshëm. Çfarë duhet bërë për ta ndarë këtë rresht në numra dhe fjalë të veçanta? Ekzistojnë dy mënyra për të arritur këtë qëllim:

  1. thirrni një funksion ri.ndahet.
  2. aplikoni funksionin i ndarë për regex.

Këtu është një shembull i përdorimit të sintaksës së secilës prej metodave për variablin tonë.

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

# ose

>>> regex.split(tekst)

Prodhimi: ['100', 'INF', 'Shkenca Kompjuterike', '213', 'MAT', 'Math', '156', 'ENG', 'Anglisht']

Në përgjithësi, të dyja metodat mund të përdoren. Por në fakt është shumë më e lehtë të përdorësh një shprehje të rregullt në vend që të përdorësh funksionin disa herë. ri.ndahet.

Gjetja e ndeshjeve me tre funksione

Le të themi se duhet të nxjerrim vetëm numra nga një varg. Çfarë duhet bërë për këtë?

re.findall()

Këtu është një rast përdorimi për funksionin gjeni të gjithë (), i cili, së bashku me shprehjet e rregullta, ju lejon të nxirrni dukuritë e një ose më shumë numrave nga një variabël teksti.

>>> print (tekst)  

100 INF Informatikë

213 MAT Matematikë  

156 ENG Anglisht

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

>>> regex_num.findall(tekst)  

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

Së bashku me simbolin d, kemi përdorur një shabllon që tregon absolutisht çdo vlerë numerike të vendosur në një ndryshore ose tekst. Dhe meqenëse shtuam një + atje, kjo do të thotë që të paktën një numër duhet të jetë i pranishëm. 

Ju gjithashtu mund të përdorni shenjën * për të specifikuar se prania e një shifre nuk kërkohet për të gjetur një përputhje.

Por në rastin tonë, pasi kemi përdorur +, kemi nxjerrë me gjeni të gjithë () 1 ose më shumë emërtime dixhitale të kurseve nga teksti. Kështu, në rastin tonë, shprehjet e rregullta veprojnë si cilësime për funksionin.

re.search() vs ri.match()

Siç mund ta merrni me mend nga emri i funksioneve, kërkimet e para për një përputhje në tekst. Pyetje: Cili është ndryshimi midis gjeni të gjithë? Çështja është se ai kthen një objekt specifik që përputhet me modelin, dhe jo të gjithë sekuencën e rezultateve të gjetura në formën e një liste, si funksioni i mëparshëm.

Nga ana tjetër, funksioni re.match bën të njëjtën gjë. Vetëm sintaksa është e ndryshme. Modeli duhet të vendoset në fillim. 

Le të marrim një shembull që e dëshmon këtë.

>>> # krijoni një variabël me tekst

>>> text2 = «»»INF Informatikë

213 MAT Matematikë 156″»»  

>>> # përpiloni regex dhe kërkoni modele

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

>>> s = regex_num.search(tekst2)  

>>> print('Indeksi i parë: ', s.start())  

>>> print('Indeksi i fundit: ', s.end())  

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

Indeksi i parë: 17 

Indeksi i fundit: 20

213

Nëse dëshironi të merrni një rezultat të ngjashëm në një mënyrë tjetër, mund të përdorni funksionin grup ().

Zëvendësimi i një pjese të tekstit me bibliotekën Re

Për të zëvendësuar tekstin, përdorni funksionin re.sub(). Supozoni se lista jonë e kurseve ka ndryshuar pak. Shohim që pas çdo vlere dixhitale kemi një skedë. Detyra jonë është të kombinojmë të gjithë këtë sekuencë në një rresht. Për ta bërë këtë, duhet të zëvendësojmë shprehjen s+ për të kaluar 

Teksti origjinal ishte:

# krijoni një variabël me tekst

>>> text = “””100 INF t Informatikë

213 MAT t Mat  

156 ALB t Anglisht»»»  

>>> print (tekst)  

100 INFO informatikës

213 XNUMX XNUMX MAT Matematikë  

156 ANG Anglisht

Për të kryer operacionin e dëshiruar, ne përdorëm linjat e mëposhtme të kodit.

# zëvendësoni një ose më shumë hapësira me 1

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

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

Si rezultat, ne kemi një linjë. 

101 COM Kompjuter 205 MAT Matematika 189 ANG Shqip

Tani merrni parasysh një problem tjetër. Ne nuk jemi përballë detyrës për të vendosur hapësira. Është shumë më e rëndësishme për ne që të gjithë emrat e kurseve të fillojnë në një linjë të re. Për ta bërë këtë, përdoret një shprehje tjetër që shton një rresht të ri në përjashtim. Çfarë lloj shprehjeje është kjo?

Bibliotekë Re mbështet një veçori të tillë si përputhja negative. Ai ndryshon nga ai i drejtpërdrejtë në atë që përmban një pikëçuditëse përpara vijës së pjerrët. Kjo do të thotë, nëse duhet të kapërcejmë karakterin e linjës së re, atëherë duhet të shkruajmë !n në vend të n.

Ne marrim kodin e mëposhtëm.

# hiqni të gjitha hapësirat përveç linjës së re  

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

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

100 INF Informatikë

213 MAT Matematikë  

156 ENG Anglisht

Cilat janë grupet e shprehjes së rregullt?

Me ndihmën e grupeve të shprehjeve të rregullta, objektet e dëshiruara mund t'i marrim në formën e elementeve të veçanta, dhe jo në një rresht. 

Supozoni se duhet të marrim numrin, kodin dhe emrin e kursit jo në një rresht, por si elementë të veçantë. Për të përfunduar detyrën, do t'ju duhet të shkruani një numër të madh rreshtash të panevojshëm kodi. 

Në fakt, detyra mund të thjeshtohet shumë. Mund të përpiloni shabllonin për të gjitha hyrjet dhe thjesht të specifikoni të dhënat që duhet të merrni nga kllapat.

Do të ketë një numër shumë të vogël rreshtash. 

# krijoni grupe të modeleve të tekstit të kursit dhe nxirrni ato

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

>>> re.findall(modeli_kursi, teksti)  

[('100', 'INF', 'Shkenca Kompjuterike'), ('213', 'MAT', 'Math'), ('156', 'ENG', 'Anglisht')]

Koncepti i përputhjes "të babëzitur".

Sipas standardit, shprehjet e rregullta janë programuar për të nxjerrë sasinë maksimale të të dhënave që përputhen. Dhe edhe nëse keni nevojë për shumë më pak.

Le të shohim një shembull të kodit HTML ku duhet të marrim etiketën.

>>> tekst = "Shembull i përputhjes së shprehjeve të rregullta të pangopura"  

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

['Shembull i përputhjes së shprehjeve të rregullta të pangopura']

Në vend që të nxirrte vetëm një etiketë, Python mori të gjithë vargun. Prandaj quhet i pangopur.

Dhe çfarë të bëni për të marrë vetëm etiketën? Në këtë rast, ju duhet të përdorni përputhjen dembel. Për të specifikuar një shprehje të tillë, një pikëpyetje shtohet në fund të modelit.

Do të merrni kodin e mëposhtëm dhe daljen e përkthyesit.

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

[”,”]

Nëse kërkohet të merret vetëm dukuria e parë e hasur, atëherë përdoret metoda kërko ().

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

"

Atëherë do të gjendet vetëm etiketa hapëse.

Modelet e shprehjeve popullore

Këtu është një tabelë që përmban modelet më të përdorura të shprehjeve të rregullta.

Dokumentacioni për modulin Re për Python 3 në. Moduli i ri për shprehje të rregullta

Përfundim

Ne kemi shqyrtuar vetëm metodat më themelore për të punuar me shprehje të rregullta. Në çdo rast, e keni parë sa të rëndësishme janë. Dhe këtu nuk ka asnjë ndryshim nëse është e nevojshme të analizohet i gjithë teksti apo fragmentet e tij individuale, nëse është e nevojshme të analizohet një postim në një rrjet social apo të mblidhen të dhëna për ta përpunuar më vonë. Shprehjet e rregullta janë një ndihmës i besueshëm në këtë çështje.

Ato ju lejojnë të kryeni detyra të tilla si:

  1. Përcaktimi i formatit të të dhënave, të tilla si një adresë emaili ose një numër telefoni.
  2. Marrja e një vargu dhe ndarja e tij në disa vargje më të vogla.
  3. Kryeni veprime të ndryshme me tekst, si kërkimi, nxjerrja e informacionit të nevojshëm ose zëvendësimi i një pjese të karaktereve.

Shprehjet e rregullta ju lejojnë gjithashtu të kryeni operacione jo të parëndësishme. Në shikim të parë, zotërimi i kësaj shkence nuk është i lehtë. Por në praktikë, gjithçka është e standardizuar, kështu që mjafton ta kuptoni një herë, pas së cilës ky mjet mund të përdoret jo vetëm në Python, por edhe në çdo gjuhë tjetër programimi. Edhe Excel përdor shprehje të rregullta për të automatizuar përpunimin e të dhënave. Pra, është mëkat të mos e përdorësh këtë mjet.

Lini një Përgjigju