Dokumentācija par Re moduli Python 3 in . Re modulis regulārām izteiksmēm

Regulārās izteiksmes ir ļoti populāra gandrīz jebkuras programmēšanas valodas sastāvdaļa. Tie palīdz ātri piekļūt nepieciešamajai informācijai. Jo īpaši tos izmanto, ja nepieciešams apstrādāt tekstu. Python pēc noklusējuma ir aprīkots ar īpašu moduli. re, kas ir atbildīgs par darbu ar regulārām izteiksmēm.

Šodien mēs detalizēti runāsim par to, kas tas vispār ir, kā ar tiem strādāt un kā modulis re palīdzēs.

Regulāras izteiksmes: ievads

Kādi ir regulāro izteiksmju lietojumi? Gandrīz visi. Piemēram, šie:

  1. Tīmekļa lietojumprogrammas, kurām nepieciešama teksta validācija. Tipisks piemērs ir tiešsaistes pasta klienti.
  2. Jebkuri citi projekti, kas saistīti ar tekstiem, datu bāzēm un tā tālāk.

Pirms sākam parsēt sintaksi, mums vajadzētu sīkāk izprast bibliotēkas darbības pamatprincipus re un vispār, kas tajā kopumā ir labs. Sniegsim arī piemērus no reālās prakses, kur aprakstīsim to izmantošanas mehānismu. Jūs varat izveidot šādu veidni, kas ir piemērota, lai veiktu dažādas darbības ar tekstu.

Kas ir veidne Re bibliotēkā?

Ar to var meklēt dažāda veida informāciju, iegūt tai atbilstošu informāciju, lai citas funkcijas padarītu adaptīvākas. Un, protams, apstrādāt šos datus.

Piemēram, ņemiet šādu veidni: s+. Tas nozīmē jebkuru atstarpes rakstzīmi. Ja pievienojat tam plus zīmi, tas nozīmē, ka raksts ietver vairāk nekā vienu atstarpi. Tas var pat saskaņot tabulēšanas rakstzīmes, kas tiek izsauktas ar t+.

Pirms to izmantošanas ir jāimportē bibliotēka Re. Pēc tam mēs izmantojam īpašu komandu, lai apkopotu veidni. Tas tiek darīts divos posmos.

>>> importēt re

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

Konkrēti, šis kods veic izmantojamas veidnes apkopošanas darbību. piemēram, lai meklētu atstarpes (vienu vai vairākas).

Atsevišķas informācijas iegūšana no dažādām virknēm, izmantojot regulārās izteiksmes

Pieņemsim, ka mums ir mainīgais, kas satur šādu informāciju.

>>> teksts = “””100 INF Informātika

213 MAT Matemātika  

156 LAT angļu»»»

Tajā ir iekļauti trīs apmācības kursi. Katra no tām sastāv no trim daļām – numura, koda un nosaukuma. Mēs redzam, ka intervāls starp šiem vārdiem ir atšķirīgs. Ko darīt, lai šo rindu sadalītu atsevišķos skaitļos un vārdos? Lai sasniegtu šo mērķi, ir divas metodes:

  1. izsaukt funkciju re.split.
  2. lietot funkciju sadalīt forums regex.

Šeit ir piemērs katras metodes sintakses izmantošanai mūsu mainīgajam.

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

# vai

>>> regex.split(text)

Izvade: ['100', 'INF', 'Datorzinātnes', '213', 'MAT', 'Math', '156', 'ENG', 'angļu valoda']

Kopumā var izmantot abas metodes. Bet patiesībā ir daudz vieglāk izmantot regulāro izteiksmi, nevis izmantot funkciju vairākas reizes. re.split.

Atbilstību atrašana ar trim funkcijām

Pieņemsim, ka no virknes ir jāizņem tikai skaitļi. Kas šim nolūkam ir jādara?

re.findall()

Šeit ir funkcijas lietošanas gadījums atrast visu (), kas kopā ar regulārām izteiksmēm ļauj no teksta mainīgā izvilkt viena vai vairāku skaitļu gadījumus.

>>> drukāt (teksts)  

100 INF Informātika

213 MAT Matemātika  

156 LAT Angļu valoda

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

>>> regex_num.findall(text)  

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

Kopā ar simbolu d mēs izmantojām veidni, kas norāda absolūti jebkuru skaitlisko vērtību, kas atrodas mainīgajā vai tekstā. Un tā kā mēs tur pievienojām vienu +, tas nozīmē, ka jābūt vismaz vienam skaitlim. 

Varat arī izmantot zīmi *, lai norādītu, ka atbilstības atrašanai nav nepieciešams cipars.

Bet mūsu gadījumā, tā kā mēs izmantojām +, mēs ekstrahējām ar atrast visu () 1 vai vairāki kursu digitālie apzīmējumi no teksta. Tādējādi mūsu gadījumā regulārās izteiksmes darbojas kā funkcijas iestatījumi.

re.search() vs re.match()

Kā var nojaust pēc funkciju nosaukuma, pirmais meklē atbilstības tekstā. Jautājums: kāda ir atšķirība starp atrast visu? Lieta ir tāda, ka tā atgriež noteiktu objektu, kas atbilst modelim, nevis visu atrasto rezultātu secību saraksta veidā, piemēram, iepriekšējā funkcija.

Savukārt re.match funkcija dara to pašu. Atšķiras tikai sintakse. Veidne jāievieto sākumā. 

Ņemsim piemēru, kas to parāda.

>>> # izveidot mainīgo ar tekstu

>>> text2 = «»»INF Informātika

213 MAT Matemātika 156″»»  

>>> # apkopojiet regulāro izteiksmi un meklējiet modeļus

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

>>> s = regex_num.search(text2)  

>>> print('Pirmais rādītājs:', s.start())  

>>> print('Pēdējais rādītājs:', s.end())  

>>> drukāt(text2[s.start():s.end()]) 

Pirmais rādītājs: 17 

Pēdējais rādītājs: 20

213

Ja vēlaties iegūt līdzīgu rezultātu citādā veidā, varat izmantot funkciju grupa ().

Teksta daļas aizstāšana ar Re bibliotēku

Lai aizstātu tekstu, izmantojiet funkciju re.sub(). Pieņemsim, ka mūsu kursu saraksts ir nedaudz mainījies. Mēs redzam, ka pēc katras digitālās vērtības mums ir cilne. Mūsu uzdevums ir apvienot visu šo secību vienā rindā. Lai to izdarītu, mums ir jāaizstāj izteiksme s+ nokārtot 

Sākotnējais teksts bija:

# izveidot mainīgo ar tekstu

>>> teksts = “””100 INF t Informātika

213 MAT t matemātika  

156 LAT t angļu»»»  

>>> drukāt (teksts)  

100 INFORMĀCIJA Informātika

213 XNUMX XNUMX MAT Matemātika  

156 LAT Angļu

Lai veiktu vēlamo darbību, mēs izmantojām šādas koda rindas.

# aizstāt vienu vai vairākas atstarpes ar 1

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

>>> drukāt(regex.sub(' ', text))  

Rezultātā mums ir viena rinda. 

101 COM Datori 205 MAT Matemātika 189 LAT Angļu valoda

Tagad apsveriet citu problēmu. Mēs nesaskaramies ar uzdevumu izvietot atstarpes. Mums ir daudz svarīgāk, lai visi kursu nosaukumi sākas jaunā rindā. Lai to izdarītu, tiek izmantota cita izteiksme, kas izņēmumam pievieno jaunu rindiņu. Kāda veida izteiksme ir šī?

bibliotēka Re atbalsta tādu funkciju kā negatīvā atbilstība. Tas atšķiras no tiešās ar to, ka pirms slīpsvītras ir izsaukuma zīme. Tas ir, ja mums ir jāizlaiž jaunrindas rakstzīme, tad n vietā jāraksta !n.

Mēs saņemam šādu kodu.

# noņemt visas atstarpes, izņemot jauno rindiņu  

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

>>> drukāt(regex.sub(' ', text))  

100 INF Informātika

213 MAT Matemātika  

156 LAT Angļu valoda

Kas ir regulāro izteiksmju grupas?

Ar regulāro izteiksmju grupu palīdzību mēs varam iegūt vēlamos objektus atsevišķu elementu veidā, nevis vienā rindā. 

Pieņemsim, ka mums jāiegūst kursa numurs, kods un nosaukums nevis vienā rindā, bet gan kā atsevišķi elementi. Lai pabeigtu uzdevumu, jums būs jāuzraksta milzīgs skaits nevajadzīgu koda rindu. 

Patiesībā uzdevumu var ievērojami vienkāršot. Varat apkopot veidni visiem ierakstiem un vienkārši norādīt datus, kas jums jāiegūst no iekavām.

Būs ļoti maz rindu. 

# izveidojiet kursa teksta veidņu grupas un izvelciet tās

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

>>> re.findall(kursa_raksts, teksts)  

[('100', 'INF', 'Datorzinātnes'), ('213', 'MAT', 'Math'), ('156', 'ENG', 'angļu valoda)]

“Mantkārīgas” atbilstības jēdziens

Pēc standarta regulārās izteiksmes ir ieprogrammētas, lai iegūtu maksimālo atbilstošo datu daudzumu. Un pat tad, ja vajag daudz mazāk.

Apskatīsim HTML koda paraugu, kurā mums jāiegūst tags.

>>> text = "Alkatīgas regulārās izteiksmes atbilstības piemērs"  

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

['Alkatīgas regulāro izteiksmju atbilstības piemērs']

Tā vietā, lai iegūtu tikai vienu tagu, Python ieguva visu virkni. Tāpēc to sauc par alkatīgu.

Un kas jādara, lai iegūtu tikai birku? Šajā gadījumā jums ir jāizmanto slinka saskaņošana. Lai norādītu šādu izteiksmi, raksta beigās tiek pievienota jautājuma zīme.

Jūs saņemsiet šādu kodu un tulka izvadi.

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

[”, ”]

Ja ir nepieciešams iegūt tikai pirmo sastapto gadījumu, tad tiek izmantota metode Meklēt ().

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

"

Tad tiks atrasts tikai sākuma tags.

Populāras izteiksmes veidnes

Šeit ir tabula, kurā ietverti visbiežāk lietotie regulārās izteiksmes modeļi.

Dokumentācija par Re moduli Python 3 in . Re modulis regulārām izteiksmēm

Secinājumi

Mēs esam apsvēruši tikai visvienkāršākās metodes darbam ar regulārām izteiksmēm. Jebkurā gadījumā jūs redzējāt, cik tie ir svarīgi. Un šeit nav nozīmes, vai ir nepieciešams parsēt visu tekstu vai tā atsevišķus fragmentus, vai ir nepieciešams analizēt ziņu sociālajā tīklā vai apkopot datus, lai to vēlāk apstrādātu. Regulāras izteiksmes ir uzticams palīgs šajā jautājumā.

Tie ļauj veikt tādus uzdevumus kā:

  1. Datu formāta norādīšana, piemēram, e-pasta adrese vai tālruņa numurs.
  2. Virknes iegūšana un sadalīšana vairākās mazākās virknēs.
  3. Veiciet dažādas darbības ar tekstu, piemēram, meklējiet, izvelciet nepieciešamo informāciju vai aizstājiet daļu no rakstzīmēm.

Regulāras izteiksmes ļauj veikt arī netriviālas darbības. No pirmā acu uzmetiena apgūt šo zinātni nav viegli. Bet praksē viss ir standartizēts, tāpēc pietiek vienreiz izdomāt, pēc tam šo rīku var izmantot ne tikai Python, bet arī jebkurā citā programmēšanas valodā. Pat Excel izmanto regulāras izteiksmes, lai automatizētu datu apstrādi. Tāpēc ir grēks neizmantot šo rīku.

Atstāj atbildi