Python 3rako Re modulurako dokumentazioa. Adierazpen erregularentzako Re modulua

Adierazpen erregularrak osagai oso ezagunak dira ia edozein programazio-lengoaiatan. Behar duzun informazioa azkar eskuratzen laguntzen dizute. Batez ere, testua prozesatzeko beharrezkoa denean erabiltzen dira. Python-ek modulu berezi batekin dator lehenespenez. re, adierazpen erregularrak lantzeaz arduratzen dena.

Gaur zehatz-mehatz hitz egingo dugu zer den orokorrean, haiekin nola lan egin eta nola modulua re lagunduko du.

Adierazpen erregularrak: sarrera

Zeintzuk dira esamolde erregularren erabilerak? Ia guztia. Adibidez, hauek:

  1. Testua baliozkotzea eskatzen duten web aplikazioak. Adibide arrunta lineako posta bezeroak dira.
  2. Testuekin, datu-baseekin eta abarrekin lotutako beste edozein proiektu.

Sintaxia analizatzen hasi aurretik, xehetasun gehiagorekin ulertu beharko genituzke liburutegiaren funtzionamenduaren oinarrizko printzipioak. re eta, oro har, zer den oro har ona. Era berean, praktika errealeko adibideak emango ditugu, non horien erabileraren mekanismoa deskribatuko dugun. Horrelako txantiloi bat sor dezakezu, testuarekin hainbat eragiketa egiteko egokia.

Zer da txantiloi bat Re liburutegian?

Harekin, hainbat motatako informazioa bilatu dezakezu, haiei dagokien informazioa lortu, beste funtzio batzuk moldagarriagoak izan daitezen. Eta, noski, datu horiek prozesatzeko.

Adibidez, hartu txantiloi hau: s+. Edozein espazio-karaktere esan nahi du. Plus ikurra gehitzen badiozu, horrek esan nahi du ereduak espazio bat baino gehiago dituela. Deitzen diren fitxa-karaktereak ere bat egin ditzake t+.

Erabili aurretik, liburutegia inportatu behar duzu Re. Horren ondoren, komando berezi bat erabiltzen dugu txantiloia konpilatzeko. Hau bi urratsetan egiten da.

>>> inportatu berriro

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

Zehazki, kode honek erabil daitekeen txantiloi bat osatzeko eragiketa egiten du. adibidez, espazioak bilatzeko (bat edo gehiago).

Adierazpen erregularrak erabiliz kate ezberdinetatik informazio bereizia lortzea

Demagun ondoko informazioa duen aldagai bat dugula.

>>> testua = “””100 INF Informatika

213 MAT Matematika  

156 ENG ingelesa»»»

Hiru prestakuntza-ikastaro ditu. Horietako bakoitzak hiru zati ditu: zenbakia, kodea eta izena. Hitz horien arteko tartea ezberdina dela ikusten dugu. Zer egin lerro hau zenbaki eta hitz bereizietan zatitzeko? Helburu hori lortzeko bi metodo daude:

  1. deitu funtzio bat berriz.zatitu.
  2. funtzioa aplikatu zatitu egiteko regex.

Hona hemen gure aldagairako metodo bakoitzaren sintaxia erabiltzeko adibide bat.

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

# edo

>>> regex.split(testua)

Irteera: ['100', 'INF', 'Informatika', '213', 'MAT', 'Math', '156', 'ENG', 'English']

Oro har, bi metodoak erabil daitezke. Baina egia esan askoz errazagoa da adierazpen erregular bat erabiltzea funtzioa hainbat aldiz erabili beharrean. berriz.zatitu.

Hiru funtzio dituzten partidak aurkitzea

Demagun kate batetik zenbakiak bakarrik atera behar ditugula. Zer egin behar da horretarako?

berriro aurkitu()

Hona hemen funtzioaren erabilera kasu bat aurkikuntza(), zeinak, adierazpen erregularrekin batera, testu-aldagai batetik zenbaki baten edo gehiagoren agerraldiak ateratzeko aukera ematen duena.

>>> inprimatu (testua)  

100 INF Informatika

213 MAT Matematika  

156 EU Ingelesa

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

>>> regex_num.findall (testua)  

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

d ikurrarekin batera, aldagai edo testu batean kokatutako edozein zenbakizko balio adierazten duen txantiloia erabili dugu. Eta hor + bat gehitu dugunez, horrek esan nahi du gutxienez zenbaki bat egon behar dela. 

* ikurra ere erabil dezakezu bat-etortze bat aurkitzeko zifra bat egotea ez dela beharrezkoa zehazteko.

Baina gure kasuan, + erabili dugunez, honekin atera dugu aurkikuntza() Ikastaroen izendapen digital bat edo gehiago testutik. Horrela, gure kasuan, adierazpen erregularrek funtzioaren ezarpen gisa jokatzen dute.

ikerketa() vs berriro lotu()

Funtzioen izenetik asma daitekeenez, lehenengoek testuan bat-etortze bat bilatzen dute. Galdera: Zein da arteko aldea aurkikuntza? Kontua da ereduarekin bat datorren objektu zehatz bat itzultzen duela, eta ez aurkitutako emaitzen sekuentzia osoa zerrenda moduan, aurreko funtzioa bezala.

Bestalde, re.match funtzioak gauza bera egiten du. Sintaxia baino ez da ezberdina. Txantiloia hasieran jarri behar da. 

Har dezagun hori erakusten duen adibide bat.

>>> # sortu aldagai bat testuarekin

>>> testua2 = «»»INF Informatika

213 MAT Matematika 156″»»  

>>> # konpilatu regex eta bilatu ereduak

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

>>> s = regex_num.search (testua2)  

>>> print('Lehen aurkibidea: ', s.start())  

>>> print('Azken indizea: ', s.end())  

>>> inprimatu(testua2[s.hasiera():s.amaiera()]) 

Lehenengo indizea: 17 

Azken aurkibidea: 20

213

Antzeko emaitza beste modu batean lortu nahi baduzu, funtzioa erabil dezakezu taldea ().

Testuaren zati bat Re liburutegiarekin ordezkatzea

Testua ordezkatzeko, erabili funtzioa berriro.sub(). Demagun gure ikastaroen zerrenda pixka bat aldatu dela. Balio digital bakoitzaren ondoren fitxa bat dugula ikusten dugu. Gure zeregina sekuentzia hori guztia lerro bakarrean konbinatzea da. Horretarako, s+ adierazpena ordezkatu behar dugu pasatzeko 

Jatorrizko testua hau zen:

# sortu aldagai bat testuarekin

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

213 MAT t Matematika  

156 ENG t Ingelesa»»»  

>>> inprimatu (testua)  

100 INFORMAZIOA Informatika

213 MAT Matematika  

156 ENG English

Nahi den eragiketa egiteko, honako kode lerro hauek erabili ditugu.

# ordezkatu zuriune bat edo gehiago 1arekin

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

>>> inprimatu(regex.sub(' ', testua))  

Ondorioz, lerro bat dugu. 

101 COM Ordenagailuak 205 MAT Matematika 189 ENG Ingelesa

Orain kontuan hartu beste arazo bat. Ez gaude espazioak jartzeko zereginaren aurrean. Guretzat askoz ere garrantzitsuagoa da ikastaroen izen guztiak lerro berri batean hastea. Horretarako, salbuespenari lerro berri bat gehitzen dion beste esamolde bat erabiltzen da. Nolako adierazpena da hau?

Liburutegia Re bat-etortze negatiboa bezalako ezaugarri bat onartzen du. Zuzenekoaren desberdina da barraren aurretik harridura-puntua duelako. Hau da, lerro berriko karakterea saltatu behar badugu, n idatzi beharrean !n idatzi behar dugu.

Hurrengo kodea lortuko dugu.

# kendu zuriune guztiak lerro berria izan ezik  

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

>>> inprimatu(regex.sub(' ', testua))  

100 INF Informatika

213 MAT Matematika  

156 EU Ingelesa

Zer dira adierazpen erregular taldeak?

Adierazpen erregular taldeen laguntzaz, nahi diren objektuak elementu bereizi moduan lor ditzakegu, eta ez lerro batean. 

Demagun ikastaroaren zenbakia, kodea eta izena ez lerro batean lortu behar ditugula, elementu bereizi gisa baizik. Ataza burutzeko, beharrezkoak ez diren kode lerro kopuru handi bat idatzi beharko duzu. 

Izan ere, zeregina asko erraztu daiteke. Sarrera guztien txantiloia konpila dezakezu eta parentesi artean lortu behar dituzun datuak zehaztu.

Oso lerro kopuru txikia izango da. 

# Sortu ikastaroko testu txantiloiak taldeak eta atera itzazu

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

>>> re.findall (ikastaro_eredua, testua)  

[('100', 'INF', 'Informatika'), ('213', 'MAT', 'Math'), ('156', 'ENG', 'Ingelesa')]

"Geedy" parekatzearen kontzeptua

Estandarren arabera, adierazpen erregularrak programatzen dira bat datozen datu kopuru handiena ateratzeko. Eta askoz gutxiago behar baduzu ere.

Ikus dezagun etiketa lortu behar dugun HTML kode lagin bat.

>>> testua = "Adierazpen erregular greedy bat etortzearen adibidea"  

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

['Adierazpen erregular greedy bat etortzearen adibidea']

Etiketa bakarra atera beharrean, Python-ek kate osoa lortu zuen. Horregatik esaten zaio gutizia.

Eta zer egin etiketa soilik lortzeko? Kasu honetan, parekatzea alferra erabili behar duzu. Adierazpen hori zehazteko, galdera ikurra gehitzen zaio ereduaren amaieran.

Ondorengo kodea eta interpretearen irteera lortuko dituzu.

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

[”, ”]

Topatutako lehenengo agerraldia bakarrik lortzea beharrezkoa bada, metodoa erabiltzen da bilatu ().

ikerketa('', testua).taldea()  

"

Orduan, hasierako etiketa bakarrik aurkituko da.

Adierazpen Herrikoien Txantiloiak

Hona hemen gehien erabiltzen diren adierazpen-ereduak biltzen dituen taula.

Python 3rako Re modulurako dokumentazioa. Adierazpen erregularentzako Re modulua

Ondorioa

Adierazpen erregularrak lantzeko metodo oinarrizkoenak baino ez ditugu kontuan hartu. Nolanahi ere, ikusi duzu zein garrantzitsuak diren. Eta hemen ez du balio testu osoa edo bere zati indibidualak analizatzea beharrezkoa den ala ez, sare sozial batean mezu bat aztertu edo datuak biltzea gero prozesatzeko. Adierazpen erregularrak lagungarri fidagarriak dira gai honetan.

Honako zereginak egiteko aukera ematen dute:

  1. Datuen formatua zehaztea, hala nola helbide elektronikoa edo telefono-zenbakia.
  2. Kate bat lortu eta hainbat kate txikiagotan zatitzea.
  3. Testuarekin hainbat eragiketa egin, hala nola bilaketa, beharrezko informazioa ateratzea edo karaktereen zati bat ordezkatzea.

Adierazpen erregularrek eragiketa ez-hutsak egiteko aukera ere ematen dute. Lehen begiratuan, zientzia hau menperatzea ez da erraza. Baina praktikan, dena estandarizatuta dago, beraz, nahikoa da behin irudikatzea, eta ondoren tresna hau Python-en ez ezik, beste edozein programazio-lengoaian ere erabil daiteke. Excel-ek ere adierazpen erregularrak erabiltzen ditu datuen tratamendua automatizatzeko. Beraz, bekatua da tresna hau ez erabiltzea.

Utzi erantzun bat