Documentació per al mòdul Re per a Python 3 en . Re mòdul per a expressions regulars

Les expressions regulars són un component molt popular de gairebé qualsevol llenguatge de programació. T'ajuden a accedir ràpidament a la informació que necessites. En particular, s'utilitzen quan cal processar text. Python ve amb un mòdul especial per defecte. re, que s'encarrega de treballar amb expressions regulars.

Avui parlarem amb detall de què és en general, com treballar amb ells i com funciona el mòdul re ajudarà.

Expressions regulars: una introducció

Quins són els usos de les expressions regulars? Gairebé tots. Per exemple, aquests:

  1. Aplicacions web que requereixen validació de text. Un exemple típic són els clients de correu en línia.
  2. Qualsevol altre projecte relacionat amb textos, bases de dades, etc.

Abans de començar a analitzar la sintaxi, hauríem d'entendre amb més detall els principis bàsics del funcionament de la biblioteca. re i, en general, el que en general té de bo. També posarem exemples de la pràctica real, on descriurem el mecanisme del seu ús. Podeu crear una plantilla d'aquest tipus, adequada perquè realitzeu una gran varietat d'operacions amb text.

Què és una plantilla a la biblioteca Re?

Amb ell, podeu cercar informació de diversos tipus, obtenir la informació corresponent, per tal de fer més adaptables altres funcions. I, per descomptat, per processar aquestes dades.

Per exemple, preneu la plantilla següent: s+. Significa qualsevol caràcter espacial. Si hi afegiu un signe més, vol dir que el patró inclou més d'un espai. Fins i tot pot fer coincidir els caràcters de tabulació que es criden amb t+.

Abans d'utilitzar-los, heu d'importar la biblioteca Re. Després d'això, fem servir una ordre especial per compilar la plantilla. Això es fa en dos passos.

>>> importar re

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

Concretament, aquest codi realitza l'operació de compilar una plantilla que es pot utilitzar. per exemple, per cercar espais (un o més).

Obtenir informació separada de diferents cadenes mitjançant expressions regulars

Suposem que tenim una variable que conté la informació següent.

>>> text = “””100 INF Informàtica

213 MAT Matemàtiques  

156 CAT Anglès»»»

Conté tres cursos de formació. Cadascun d'ells consta de tres parts: número, codi i nom. Veiem que l'interval entre aquestes paraules és diferent. Què cal fer per tal de dividir aquesta línia en nombres i paraules separats? Hi ha dos mètodes per aconseguir aquest objectiu:

  1. cridar una funció re.dividir.
  2. aplicar la funció dividit for expressió regular.

Aquí teniu un exemple d'ús de la sintaxi de cadascun dels mètodes per a la nostra variable.

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

# o

>>> regex.split(text)

Sortida: ['100', 'INF', 'Computer Science', '213', 'MAT', 'Math', '156', 'ENG', 'Anglès']

En general, es poden utilitzar tots dos mètodes. Però en realitat és molt més fàcil utilitzar una expressió regular en lloc d'utilitzar la funció diverses vegades. re.dividir.

Trobar coincidències amb tres funcions

Suposem que només hem d'extreure nombres d'una cadena. Què cal fer per a això?

re.findall()

Aquí teniu un cas d'ús de la funció findall(), que, juntament amb les expressions regulars, permet extreure ocurrències d'un o més nombres d'una variable de text.

>>> imprimir (text)  

100 INF Informàtica

213 MAT Matemàtiques  

156 CAT Anglès

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

>>> regex_num.findall(text)  

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

Juntament amb el símbol d, hem utilitzat una plantilla que indica absolutament qualsevol valor numèric situat en una variable o text. I com que hi hem afegit un +, això vol dir que almenys un número ha d'estar present. 

També podeu utilitzar el signe * per especificar que la presència d'un dígit no és necessària perquè es trobi una coincidència.

Però en el nostre cas, com que hem utilitzat +, hem extret amb findall() 1 o més designacions digitals dels cursos a partir del text. Així, en el nostre cas, les expressions regulars actuen com a configuració de la funció.

re.search() vs re.match()

Com podeu endevinar pel nom de les funcions, la primera cerca una coincidència al text. Pregunta: Quina diferència hi ha entre trobar? La qüestió és que retorna un objecte específic que coincideix amb el patró, i no tota la seqüència de resultats trobats en forma de llista, com la funció anterior.

Al seu torn, la funció de re.match fa el mateix. Només la sintaxi és diferent. La plantilla s'ha de col·locar al principi. 

Posem un exemple que ho demostri.

>>> # crea una variable amb text

>>> text2 = «»»INF Informàtica

213 MAT Matemàtiques 156″»»  

>>> # compileu regex i busqueu patrons

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

>>> s = regex_num.search(text2)  

>>> print('Primer índex: ', s.start())  

>>> print('Últim índex: ', s.end())  

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

Primer índex: 17 

Últim índex: 20

213

Si voleu obtenir un resultat similar d'una manera diferent, podeu utilitzar la funció grup ().

Substitució de part del text per la biblioteca Re

Per substituir el text, utilitzeu la funció re.sub(). Suposem que la nostra llista de cursos ha canviat una mica. Veiem que després de cada valor digital tenim una pestanya. La nostra tasca és combinar tota aquesta seqüència en una línia. Per fer-ho, hem de substituir l'expressió s+ passar 

El text original era:

# crear una variable amb text

>>> text = “””100 INF t Informàtica

213 MAT t Matemàtiques  

156 CAT t anglès»»»  

>>> imprimir (text)  

100 INFORMACIÓ Informàtica

213 MAT Matemàtiques  

156 ANG English

Per realitzar l'operació desitjada, hem utilitzat les següents línies de codi.

# substituïu un o més espais per 1

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

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

Com a resultat, tenim una línia. 

101 COM Ordinadors 205 MAT Matemàtiques 189 ENG Anglès

Ara considereu un altre problema. No estem davant la tasca de posar espais. És molt més important per a nosaltres que tots els noms de cursos comencin en una línia nova. Per fer-ho, s'utilitza una altra expressió que afegeix una nova línia a l'excepció. Quina mena d'expressió és aquesta?

Library Re admet una característica com ara la concordança negativa. Es diferencia de la directa perquè conté un signe d'exclamació abans de la barra inclinada. És a dir, si hem de saltar el caràcter de nova línia, hem d'escriure !n en comptes de n.

Obtenim el següent codi.

# elimina tots els espais excepte la nova línia  

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

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

100 INF Informàtica

213 MAT Matemàtiques  

156 CAT Anglès

Què són els grups d'expressió regular?

Amb l'ajuda de grups d'expressions regulars, podem obtenir els objectes desitjats en forma d'elements separats, i no en una línia. 

Suposem que necessitem obtenir el número, el codi i el nom del curs no en una línia, sinó com a elements separats. Per completar la tasca, haureu d'escriure un gran nombre de línies de codi innecessàries. 

De fet, la tasca es pot simplificar molt. Podeu compilar la plantilla per a totes les entrades i només especificar les dades que necessiteu obtenir entre claudàtors.

Hi haurà un nombre molt reduït de línies. 

# crear grups de plantilles de text del curs i extreure-les

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

>>> re.findall(patró_curs, text)  

[('100', 'INF', 'Computer Science'), ('213', 'MAT', 'Math'), ('156', 'ENG', 'Anglès')]

El concepte de coincidència "cobdiciosa".

Per estàndard, les expressions regulars es programen per extreure la màxima quantitat de dades coincidents. I encara que necessitis molt menys.

Vegem una mostra de codi HTML on hem d'obtenir l'etiqueta.

>>> text = "Exemple de concordança d'expressions regulars greedy"  

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

['Exemple de concordança d'expressions regulars greedy']

En lloc d'extreure només una etiqueta, Python va obtenir tota la cadena. Per això s'anomena cobdiciós.

I què cal fer per aconseguir només l'etiqueta? En aquest cas, heu d'utilitzar la concordança mandrosa. Per especificar aquesta expressió, s'afegeix un signe d'interrogació al final del patró.

Obtindreu el codi següent i la sortida de l'intèrpret.

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

[”, ”]

Si només cal obtenir la primera ocurrència trobada, s'utilitza el mètode cerca ().

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

"

Aleshores només es trobarà l'etiqueta d'obertura.

Plantilles d'expressió popular

Aquí hi ha una taula que conté els patrons d'expressió regular més utilitzats.

Documentació per al mòdul Re per a Python 3 en . Re mòdul per a expressions regulars

Conclusió

Hem considerat només els mètodes més bàsics per treballar amb expressions regulars. En qualsevol cas, heu vist com d'importants són. I aquí no fa cap diferència si cal analitzar tot el text o els seus fragments individuals, si cal analitzar una publicació en una xarxa social o recollir dades per processar-la posteriorment. Les expressions regulars són una ajuda fiable en aquesta qüestió.

Permeten realitzar tasques com ara:

  1. Especificar el format de les dades, com ara una adreça de correu electrònic o un número de telèfon.
  2. Obtenir una corda i dividir-la en diverses cordes més petites.
  3. Realitza diverses operacions amb text, com cercar, extreure la informació necessària o substituir part dels caràcters.

Les expressions regulars també us permeten realitzar operacions no trivials. A primera vista, dominar aquesta ciència no és fàcil. Però a la pràctica, tot està estandarditzat, així que n'hi ha prou amb esbrinar-ho una vegada, després de la qual cosa aquesta eina es pot utilitzar no només en Python, sinó també en qualsevol altre llenguatge de programació. Fins i tot Excel utilitza expressions regulars per automatitzar el processament de dades. Per tant, és un pecat no utilitzar aquesta eina.

Deixa un comentari