La guía para principiantes de expresiones regulares con Python

Si es programador, es probable que ya sepa qué son las expresiones regulares (regex). Los patrones de expresiones regulares se han implementado en casi todos los lenguajes de programación convencionales, pero aún así, la mayoría de los desarrolladores no reconocen el poder y la versatilidad de estos patrones.

Esta guía trata sobre expresiones regulares y cómo puede usarlas en el lenguaje de programación Python.

¿Qué son las expresiones regulares?

Las expresiones regulares son patrones que ayudan al usuario a hacer coincidir combinaciones de caracteres en archivos de texto y cadenas. Puede utilizar expresiones regulares para filtrar o encontrar un patrón específico en la salida de un comando o documento.

Hay varios casos de uso de expresiones regulares, el más conocido es el comando grep en Linux . Otras aplicaciones incluyen el filtrado de información, como la extracción de direcciones de correo electrónico y números de teléfono de un volcado de datos.

La razón principal por la que muchos desarrolladores se desvían de las expresiones regulares es la falta de conciencia sobre el poder de la coincidencia de patrones. Algunos incluso encuentran confusas las expresiones regulares debido a la gran cantidad de caracteres y secuencias que se utilizan en los patrones.

Cualquiera sea la razón, las expresiones regulares son y serán uno de los aspectos más importantes de la programación que todos deberían conocer.

Expresiones regulares: caracteres y secuencias coincidentes

Regex es un lenguaje completamente nuevo en sí mismo. Un motor de expresiones regulares interpreta patrones compuestos por varios caracteres equipados con significados específicos. Los literales básicos, como los caracteres alfanuméricos, coinciden. Pero los caracteres complejos como $, *, +, {, etc. ayudan en la búsqueda de coincidencias de orden superior.

  1. Asterisco (*): coincide con el carácter anterior cero o más veces. El significado literal del carácter sería "Elemento multiplicado n veces". Por ejemplo, si la expresión regular es abc * , las cadenas coincidentes serán ab, abc, abcc, abccc, abcccc, etc. La expresión [bc] * coincidirá con bc, bcbc, bcbc, etc.
  2. Más (+): coincide con el carácter anterior una o más veces. El funcionamiento del carácter + es similar a * , pero el carácter + omite el patrón si el carácter no aparece. Por ejemplo, abc + coincidirá con abc, abcc, abccc, etc. pero no ab.
  3. Signo de interrogación (?): Coincide con el carácter anterior cero o una vez (s). Por ejemplo, el patrón abc? coincidirá con ab y abc solamente.
  4. Pipe (|): se utiliza como operador OR binario. Coincide con cualquiera de los caracteres que preceden y siguen a la tubería. Por ejemplo, a | b coincidirá con a o b.
  5. Punto (.): Coincide con un personaje cuya identidad se desconoce. Por ejemplo, ac coincidirá con aac, abc, acc, a2c, etc.
  6. Zanahoria (^): coincide con el primer carácter del patrón. Por ejemplo, ^ Ra coincidirá con palabras que comiencen con Ra , como Rabbit, Raccoon y Random.
  7. Dólar ($): coincide con el último carácter del patrón. Por ejemplo, un $ coincidirá con palabras que terminen con un tipo Van, Dan y Plan.
  8. Guión (-): se utiliza para definir un rango de caracteres. Por ejemplo, [0-9] coincidirá con todos los caracteres numéricos de un solo dígito.

Las secuencias especiales utilizadas en patrones de expresión regular son:

  1. A: Devuelve una coincidencia si los caracteres siguientes están presentes al principio de la cadena. Por ejemplo, AThe coincidirá con palabras que comiencen con The , como The, Them, They, etc.
  2. b: Devuelve una coincidencia si el carácter se encuentra al principio o al final de una palabra. Por ejemplo, bmad y mad b coincidirán con palabras como made y nomad respectivamente.
  3. B: Devuelve una coincidencia si el carácter no se encuentra al principio o al final de una palabra.
  4. d: Coincide con los caracteres numéricos presentes en la cadena. Por ejemplo, / d * coincidirá con números como 1, 12, 1232, etc.
  5. D: Coincide con caracteres no numéricos en la cadena. / D coincidirá con a, b, c, f, etc.
  6. s: Coincide con un carácter de espacio en blanco en el texto.
  7. S: Coincide con un carácter que no es un espacio en blanco en el texto.
  8. w: Devuelve una coincidencia si la cadena contiene caracteres alfanuméricos, incluidos guiones bajos. Por ejemplo, w coincidirá con a, b, c, d, 1, 2, 3, etc.
  9. W: Devuelve una coincidencia si la cadena no contiene caracteres alfanuméricos o guiones bajos.
  10. Z: coincide con los caracteres al final de una cadena. Por ejemplo, end Z coincidirá con palabras que terminen con end , como doblar, reparar, tender, etc.

Métodos de Python para expresiones regulares

En Python, la biblioteca re proporciona todas las funciones y utilidades necesarias para implementar expresiones regulares en sus programas. No tiene que descargar la biblioteca usando pip, ya que viene preinstalada con el intérprete de Python.

Para importar la biblioteca re en Python, agregue el siguiente código a su secuencia de comandos:

 import re

Tenga en cuenta que al pasar expresiones regulares en Python, usamos cadenas sin procesar, ya que no interpretan caracteres especiales como n y t de manera diferente.

Partido()

El método re.match () en Python devuelve un objeto regex si el programa encuentra una coincidencia al comienzo de la cadena especificada. Esta función toma dos argumentos básicos:

 re.match(pattern, string)

… donde patrón es la expresión regular y cadena es el texto que debe buscarse.

Eche un vistazo al fragmento de código a continuación.

 import re
match = re.match(r'Word', "This sentence contains a Word")
print(match)

El carácter r antes de la cadena significa cadena sin formato.

Producción:

 None

El código mencionado anteriormente devuelve Ninguno porque Word no estaba presente al principio de la cadena.

Si se encuentra una coincidencia, puede imprimir la coincidencia utilizando el método group () que pertenece al objeto regex.

 import re
match = re.match(r'Word', "Word is hard to read")
print(match.group(0))

Producción:

 Word

El método re.search () toma argumentos similares a re.match (). Si bien match () solo devuelve coincidencias presentes al principio de la cadena, search () devolverá coincidencias encontradas en cualquier índice de la cadena.

 import re
match = re.search(r'Word', "This sentence contains a Word. Word is hard to read.")
print(match.group(0))

Tenga en cuenta que los métodos match () y search () solo devolverán una coincidencia de patrón. En el código mencionado anteriormente, Word aparece dos veces. Pero la función search () solo coincidirá con la primera aparición de la palabra.

 Word

Encuentra todos()

Como ya puede adivinar, el método findall () devuelve todas las coincidencias posibles en la cadena.

 import re
match = re.search(r'Word', "This sentence contains a Word. Word is hard to read.")
for elem in match:
print(elem)

En lugar de devolver un objeto regex, la función findall () devuelve una lista de todas las coincidencias. Puede iterar a través de la lista usando un bucle for en Python .

Separar()

Si desea dividir una cadena en subcadenas usando un patrón como delimitador, entonces la función split () es la que necesita.

 import re
split = re.split(r'and', "This word and that and this are different.")
print(split)

Producción:

 ['This word", "that", "this are different."]

Sub()

El método sub () permite al usuario sustituir una palabra específica en lugar de un patrón. Toma los siguientes argumentos.

 re.sub(pattern, replacement, string)

Considere este fragmento de código:

 import re
result = re.sub(r'and', 'or', "Dave and Harry must be punished.")
print(result)

Producción:

 Dave or Harry must be punished.

Compilar()

El método re.compile () en la biblioteca re permite al usuario almacenar una versión compilada del patrón de expresión regular en la memoria. Luego, utilizando el objeto compilado, el usuario puede filtrar rápidamente el volcado de texto especificado para patrones coincidentes.

 import re
pattern = re.compile('Python')
match = pattern.findall("Python is a great language for writing scripts. Python is easy to learn.")
print(match)

Esta función se utiliza principalmente para guardar patrones que consumen muchos recursos y necesitan mucho tiempo para ejecutarse. Compilar y guardar el patrón como un objeto de antemano resuelve este problema.

Aproveche el poder de Regex con Python

Cuando trabaja con archivos de texto y salida, regex es una gran herramienta para tener a su disposición. Puede escribir rápidamente algún código para filtrar o sustituir patrones específicos en el documento.

Memorizar todos los caracteres y las secuencias coincidentes puede ser difícil si recién está comenzando con expresiones regulares. Para mejorar en las expresiones regulares, consultar una lista de caracteres, métodos y secuencias de vez en cuando definitivamente lo ayudará a largo plazo.