Documentación del módulo Re para Python 3 en formato . Módulo Re para expresiones regulares

Las expresiones regulares son un componente muy popular de casi cualquier lenguaje de programación. Le ayudan a acceder rápidamente a la información que necesita. En particular, se utilizan cuando es necesario procesar texto. Python viene con un módulo especial por defecto. re, que se encarga de trabajar con expresiones regulares.

Hoy hablaremos en detalle sobre qué es en general, cómo trabajar con ellos y cómo funciona el módulo. re ayudará.

Expresiones regulares: una introducción

¿Cuáles son los usos de las expresiones regulares? Casi todos. Por ejemplo, estos:

  1. Aplicaciones web que requieren validación de texto. Un ejemplo típico son los clientes de correo en línea.
  2. Cualquier otro proyecto relacionado con textos, bases de datos, etc.

Antes de comenzar a analizar la sintaxis, debemos comprender con más detalle los principios básicos del funcionamiento de la biblioteca. re y en general, lo que tiene de bueno en general. También daremos ejemplos de la práctica real, donde describiremos el mecanismo de su uso. Puede crear una plantilla de este tipo, adecuada para realizar una amplia variedad de operaciones con texto.

¿Qué es una plantilla en la biblioteca Re?

Con él, puede buscar información de varios tipos, obtener información correspondiente a ellos, para que otras funciones sean más adaptables. Y, por supuesto, para procesar estos datos.

Por ejemplo, tome la siguiente plantilla: s+. Significa cualquier carácter de espacio. Si le agrega un signo más, significa que el patrón incluye más de un espacio. Incluso puede hacer coincidir los caracteres de tabulación que se llaman con t+.

Antes de usarlos, necesita importar la biblioteca Re. Después de eso, usamos un comando especial para compilar la plantilla. Esto se hace en dos pasos.

>>> importar re

>>> expresión regular = re.compilar('s+')

En concreto, este código realiza la operación de compilar una plantilla que se puede utilizar. por ejemplo, para buscar espacios (uno o más).

Obtener información separada de diferentes cadenas usando expresiones regulares

Supongamos que tenemos una variable que contiene la siguiente información.

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

213 MAT Matemáticas  

156 ESP Español»»»

Contiene tres cursos de formación. Cada uno de ellos consta de tres partes: número, código y nombre. Vemos que el intervalo entre estas palabras es diferente. ¿Qué hacer para dividir esta línea en números y palabras separados? Hay dos métodos para lograr este objetivo:

  1. llamar a una función re.dividir.
  2. aplicar función dividido para expresiones regulares.

Aquí hay un ejemplo del uso de la sintaxis de cada uno de los métodos para nuestra variable.

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

# o

>>> expresión regular.split(texto)

Salida: ['100', 'INF', 'Informática', '213', 'MAT', 'Matemáticas', '156', 'ENG', 'Inglés']

En general, se pueden utilizar ambos métodos. Pero en realidad es mucho más fácil usar una expresión regular en lugar de usar la función varias veces. re.dividir.

Encontrar coincidencias con tres funciones

Digamos que necesitamos extraer solo números de una cadena. ¿Qué hay que hacer para esto?

re.findall ()

Aquí hay un caso de uso para la función encuentra todos(), que, junto con las expresiones regulares, le permite extraer ocurrencias de uno o más números de una variable de texto.

>>> imprimir (texto)  

100 INF Informática

213 MAT Matemáticas  

156 ESP Inglés

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

>>> regex_num.findall(texto)  

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

Junto con el símbolo d, utilizamos una plantilla que indica absolutamente cualquier valor numérico ubicado en una variable o texto. Y dado que agregamos uno + allí, esto significa que al menos un número debe estar presente. 

También puede usar el signo * para especificar que no se requiere la presencia de un dígito para encontrar una coincidencia.

Pero en nuestro caso, como usamos +, extrajimos con encuentra todos() 1 o más designaciones digitales de cursos del texto. Así, en nuestro caso, las expresiones regulares actúan como ajustes para la función.

re.búsqueda() vs revancha()

Como puede adivinar por el nombre de las funciones, la primera busca una coincidencia en el texto. Pregunta: ¿Cuál es la diferencia entre ¿encuentra todos? El punto es que devuelve un objeto específico que coincide con el patrón, y no toda la secuencia de resultados encontrados en forma de lista, como la función anterior.

A su vez, la función re.match hace lo mismo. Solo la sintaxis es diferente. La plantilla debe colocarse al principio. 

Tomemos un ejemplo que demuestra esto.

>>> # crea una variable con texto

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

213 MAT Matemáticas 156″»»  

>>> # compila expresiones regulares y busca patrones

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

>>> s = regex_num.buscar(texto2)  

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

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

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

Primer índice: 17 

Último índice: 20

213

Si desea obtener un resultado similar de una manera diferente, puede utilizar la función grupo().

Reemplazar parte del texto con la biblioteca Re

Para reemplazar texto, use la función re.sub(). Supongamos que nuestra lista de cursos ha cambiado un poco. Vemos que después de cada valor digital tenemos una pestaña. Nuestra tarea es combinar toda esta secuencia en una línea. Para hacer esto, necesitamos reemplazar la expresión s+ pasar 

El texto original era:

# crear una variable con texto

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

213 MAT t Matemáticas  

156 ESP t Español»»»  

>>> imprimir (texto)  

100 INFORMACIÓN Informática

213 MAT Matemáticas  

156 ANG Inglés

Para realizar la operación deseada, utilizamos las siguientes líneas de código.

# reemplazar uno o más espacios con 1

>>> expresión regular = re.compilar('s+')  

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

Como resultado, tenemos una línea. 

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

Ahora considere otro problema. No estamos ante la tarea de poner espacios. Es mucho más importante para nosotros que todos los nombres de los cursos comiencen en una nueva línea. Para hacer esto, se usa otra expresión que agrega una nueva línea a la excepción. ¿Qué clase de expresión es esta?

de Recursos Re admite una función como la coincidencia negativa. Se diferencia del directo en que contiene un signo de exclamación antes de la barra oblicua. Es decir, si necesitamos omitir el carácter de nueva línea, entonces debemos escribir !n en lugar de n.

Obtenemos el siguiente código.

# eliminar todos los espacios excepto la nueva línea  

>>> expresión regular = re.compilar('((?!n)s+)')  

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

100 INF Informática

213 MAT Matemáticas  

156 ESP Inglés

¿Qué son los grupos de expresiones regulares?

Con la ayuda de grupos de expresiones regulares, podemos obtener los objetos deseados en forma de elementos separados, y no en una sola línea. 

Supongamos que necesitamos obtener el número, el código y el nombre del curso no en una sola línea, sino como elementos separados. Para completar la tarea, deberá escribir una gran cantidad de líneas de código innecesarias. 

De hecho, la tarea se puede simplificar enormemente. Puede compilar la plantilla para todas las entradas y simplemente especificar los datos que necesita obtener de los corchetes.

Habrá un número muy pequeño de líneas. 

# crear grupos de plantillas de texto del curso y extraerlas

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

>>> re.findall(curso_patrón, texto)  

[('100', 'INF', 'Informática'), ('213', 'MAT', 'Matemáticas'), ('156', 'ENG', 'Inglés')]

El concepto de emparejamiento "codicioso"

Por norma, las expresiones regulares están programadas para extraer la máxima cantidad de datos coincidentes. E incluso si necesitas mucho menos.

Veamos un ejemplo de código HTML donde necesitamos obtener la etiqueta.

>>> text = “Ejemplo de coincidencia de expresión regular codiciosa”  

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

['Ejemplo de coincidencia de expresiones regulares codiciosas']

En lugar de extraer solo una etiqueta, Python obtuvo la cadena completa. Por eso se llama codicioso.

¿Y qué hacer para obtener solo la etiqueta? En este caso, debe utilizar la coincidencia perezosa. Para especificar tal expresión, se agrega un signo de interrogación al final del patrón.

Obtendrá el siguiente código y la salida del intérprete.

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

[”, “]

Si se requiere obtener solo la primera ocurrencia encontrada, entonces se usa el método búsqueda ().

re.buscar('', texto).grupo()  

"

Entonces solo se encontrará la etiqueta de apertura.

Plantillas de expresiones populares

Aquí hay una tabla que contiene los patrones de expresiones regulares más utilizados.

Documentación del módulo Re para Python 3 en formato . Módulo Re para expresiones regulares

Conclusión

Hemos considerado solo los métodos más básicos para trabajar con expresiones regulares. En cualquier caso, has visto lo importantes que son. Y aquí no importa si es necesario analizar el texto completo o sus fragmentos individuales, si es necesario analizar una publicación en una red social o recopilar datos para procesarlos más tarde. Las expresiones regulares son una ayuda confiable en este asunto.

Te permiten realizar tareas como:

  1. Especificar el formato de los datos, como una dirección de correo electrónico o un número de teléfono.
  2. Obtener una cadena y dividirla en varias cadenas más pequeñas.
  3. Realiza diversas operaciones con el texto, como buscar, extraer la información necesaria o sustituir parte de los caracteres.

Las expresiones regulares también le permiten realizar operaciones no triviales. A primera vista, dominar esta ciencia no es fácil. Pero en la práctica, todo está estandarizado, por lo que es suficiente resolverlo una vez, después de lo cual esta herramienta se puede usar no solo en Python, sino también en cualquier otro lenguaje de programación. Incluso Excel usa expresiones regulares para automatizar el procesamiento de datos. Así que es un pecado no usar esta herramienta.

Deje un comentario