Documentación para o módulo Re para Python 3 en . Re módulo para expresións regulares

As expresións regulares son un compoñente moi popular de case calquera linguaxe de programación. Axúdanche a acceder rapidamente á información que necesitas. En particular, utilízanse cando é necesario procesar texto. Python vén cun módulo especial por defecto. re, que se encarga de traballar con expresións regulares.

Hoxe falaremos polo miúdo de que é en xeral, como traballar con eles e como é o módulo re vai axudar.

Expresións regulares: unha introdución

Cales son os usos das expresións regulares? Case todos. Por exemplo, estes:

  1. Aplicacións web que requiren validación de texto. Un exemplo típico son os clientes de correo en liña.
  2. Calquera outro proxecto relacionado con textos, bases de datos, etc.

Antes de comezar a analizar a sintaxe, deberíamos comprender con máis detalle os principios básicos do funcionamento da biblioteca. re e, en xeral, o que en xeral é bo. Tamén daremos exemplos da práctica real, onde describiremos o mecanismo do seu uso. Podes crear un modelo deste tipo, axeitado para realizar unha gran variedade de operacións con texto.

Que é un modelo na biblioteca Re?

Con ela, pódese buscar información de varios tipos, obter información correspondente, para facer máis adaptables outras funcións. E, por suposto, para procesar estes datos.

Por exemplo, tome o seguinte modelo: s+. Significa calquera carácter espacial. Se lle engades un signo máis, isto significa que o patrón inclúe máis dun espazo. Incluso pode coincidir con caracteres de tabulación que se chaman t+.

Antes de usalos, cómpre importar a biblioteca Re. Despois diso, usamos un comando especial para compilar o modelo. Isto faise en dous pasos.

>>> importar re

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

En concreto, este código realiza a operación de compilar un modelo que se pode utilizar. por exemplo, para buscar espazos (un ou máis).

Obtención de información separada de diferentes cadeas mediante expresións regulares

Supoñamos que temos unha variable que contén a seguinte información.

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

213 MAT Matemáticas  

156 ENG Inglés»»»

Contén tres cursos de formación. Cada un deles consta de tres partes: número, código e nome. Vemos que o intervalo entre estas palabras é diferente. Que facer para dividir esta liña en números e palabras separadas? Existen dous métodos para acadar este obxectivo:

  1. chamar a unha función re.dividir.
  2. aplicar función división para rexex.

Aquí tes un exemplo de uso da sintaxe de cada un dos métodos para a nosa variable.

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

# ou

>>> regex.split(texto)

Saída: ['100', 'INF', 'Computer Science', '213', 'MAT', 'Math', '156', 'ENG', 'English']

En xeral, pódense utilizar ambos os métodos. Pero en realidade é moito máis doado usar unha expresión regular en lugar de usar a función varias veces. re.dividir.

Buscar coincidencias con tres funcións

Digamos que necesitamos extraer só números dunha cadea. Que hai que facer para iso?

reencontrar()

Aquí tes un caso de uso para a función findall (), que, xunto coas expresións regulares, permite extraer ocorrencias dun ou máis números dunha variable de texto.

>>> imprimir (texto)  

100 INF Informática

213 MAT Matemáticas  

156 ENG Inglés

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

>>> regex_num.findall(texto)  

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

Xunto co símbolo d, utilizamos un modelo que indica absolutamente calquera valor numérico situado nunha variable ou texto. E xa que engadimos un + alí, isto significa que debe estar presente polo menos un número. 

Tamén pode usar o signo * para especificar que non é necesaria a presenza dun díxito para atopar unha coincidencia.

Pero no noso caso, xa que usamos +, extraemos con findall () 1 ou máis designacións dixitais de cursos a partir do texto. Así, no noso caso, as expresións regulares actúan como axustes para a función.

investigación() vs re.coincidir()

Como podes adiviñar polo nome das funcións, as primeiras buscan unha coincidencia no texto. Pregunta: Cal é a diferenza entre atopar? A cuestión é que devolve un obxecto específico que coincide co patrón, e non toda a secuencia de resultados atopados en forma de lista, como a función anterior.

Pola súa banda, a función re.match fai o mesmo. Só a sintaxe é diferente. O modelo debe colocarse ao principio. 

Poñamos un exemplo que o demostra.

>>> # crea unha variable con texto

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

213 MAT Matemáticas 156″»»  

>>> # compile regex e busque patróns

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

>>> s = regex_num.search(text2)  

>>> print('Primeiro índice: ', s.start())  

>>> print('Último índice: ', s.end())  

>>> imprimir(texto2[s.inicio():s.fin()]) 

Primeiro índice: 17 

Último índice: 20

213

Se queres obter un resultado semellante dunha forma diferente, podes usar a función grupo ().

Substituír parte do texto pola biblioteca Re

Para substituír texto, use a función re.sub(). Supoñamos que a nosa lista de cursos cambiou un pouco. Vemos que despois de cada valor dixital temos unha pestana. A nosa tarefa é combinar toda esta secuencia nunha soa liña. Para iso, necesitamos substituír a expresión s+ pasar 

O texto orixinal era:

# crea unha variable con texto

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

213 MAT t Matemáticas  

156 ENG t Inglés»»»  

>>> imprimir (texto)  

100 INFORMACIÓN Informática

213 MAT Matemáticas  

156 ENG Inglés

Para realizar a operación desexada, utilizamos as seguintes liñas de código.

# substituír un ou máis espazos por 1

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

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

Como resultado, temos unha liña. 

101 COM Informática 205 MAT Matemáticas 189 ENG Inglés

Agora considere outro problema. Non estamos ante a tarefa de poñer espazos. É moito máis importante para nós que todos os nomes dos cursos comecen nunha nova liña. Para iso utilízase outra expresión que engade unha nova liña á excepción. Que tipo de expresión é esta?

Biblioteca Re admite unha función como a coincidencia negativa. Diferénciase do directo en que contén un signo de exclamación antes da barra. É dicir, se necesitamos omitir o carácter de nova liña, entón necesitamos escribir !n en lugar de n.

Obtemos o seguinte código.

# elimina todos os espazos excepto a nova liña  

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

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

100 INF Informática

213 MAT Matemáticas  

156 ENG Inglés

Que son os grupos de expresións regulares?

Coa axuda de grupos de expresións regulares, podemos obter os obxectos desexados en forma de elementos separados, e non nunha liña. 

Supoñamos que necesitamos obter o número, código e nome do curso non nunha liña, senón como elementos separados. Para completar a tarefa, terás que escribir un gran número de liñas de código innecesarias. 

De feito, a tarefa pódese simplificar moito. Podes compilar o modelo para todas as entradas e só especificar os datos que necesitas obter entre corchetes.

Haberá un número moi reducido de liñas. 

# crea grupos de modelos de texto de curso e extraeos

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

>>> re.findall (patrón_curso, texto)  

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

O concepto de correspondencia "cobizosa".

Por norma, as expresións regulares están programadas para extraer a máxima cantidade de datos coincidentes. E aínda que necesites moito menos.

Vexamos unha mostra de código HTML onde necesitamos obter a etiqueta.

>>> text = "Exemplo de coincidencia de expresións regulares cobizosa"  

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

['Exemplo de coincidencia de expresións regulares cobizosa']

En lugar de extraer só unha etiqueta, Python obtivo a cadea completa. Por iso se lle chama cobizoso.

E que facer para conseguir só a etiqueta? Neste caso, cómpre usar a correspondencia preguiceira. Para especificar tal expresión, engádese un signo de interrogación ao final do patrón.

Recibirá o seguinte código e a saída do intérprete.

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

[”, ”]

Se é necesario obter só a primeira aparición atopada, entón úsase o método buscar ().

investigación('', texto).grupo()  

"

Entón só se atopará a etiqueta de apertura.

Modelos de expresión popular

Aquí tes unha táboa que contén os patróns de expresión regular máis usados.

Documentación para o módulo Re para Python 3 en . Re módulo para expresións regulares

Conclusión

Consideramos só os métodos máis básicos para traballar con expresións regulares. En calquera caso, xa viches o importantes que son. E aquí non importa se é necesario analizar todo o texto ou os seus fragmentos individuais, se é necesario analizar unha publicación nunha rede social ou recoller datos para procesala máis tarde. As expresións regulares son unha axuda fiable neste asunto.

Permítenche realizar tarefas como:

  1. Especificar o formato dos datos, como un enderezo de correo electrónico ou un número de teléfono.
  2. Conseguir unha corda e dividila en varias cordas máis pequenas.
  3. Realiza diversas operacións con texto, como buscar, extraer a información necesaria ou substituír parte dos caracteres.

As expresións regulares tamén permiten realizar operacións non triviais. A primeira vista, dominar esta ciencia non é doado. Pero na práctica, todo está estandarizado, polo que abonda con descubrilo unha vez, despois de que esta ferramenta pode usarse non só en Python, senón tamén en calquera outra linguaxe de programación. Incluso Excel usa expresións regulares para automatizar o procesamento de datos. Polo tanto, é un pecado non usar esta ferramenta.

Deixe unha resposta