Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial programming >> python

Expresiones Regulares en Python (Módulo re) – Guía Práctica

Expresiones Regulares en Python (Módulo re) – Guía Práctica

Descubre cómo aprovechar el poder de las expresiones regulares en Python con el módulo re. Ejemplos paso a paso ilustran patrones comunes, técnicas de matching y funciones avanzadas.

¿Qué es una Expresión Regular?

expresión regular (RegEx) es una secuencia de caracteres que define un patrón de búsqueda. Por ejemplo, el patrón ^a...s$ coincide con cualquier cadena de cinco letras que empiece con a y termine con s.

^a...s$

Los patrones pueden usarse para comparar contra cadenas. La tabla siguiente demuestra cómo se comporta el patrón con diferentes entradas:

ExpresiónCadena¿Coincide?
^a...s$absNo coincide
aliasCoincide
abyssCoincide
AliasNo coincide
Un ábacoNo coincide

El módulo re de Python proporciona las herramientas necesarias para trabajar con RegEx. Aquí un ejemplo rápido que usa re.match() para verificar un patrón contra una cadena:

import re
pattern = '^a...s$'
test_string = 'abyss'
result = re.match(pattern, test_string)
if result:
    print("Búsqueda exitosa.")
else:
    print("Búsqueda fallida.")

Cuando el patrón se encuentra, re.match() devuelve un objeto match; de lo contrario devuelve None.


Especificando Patrones con Metacaracteres

Los metacaracteres son símbolos especiales que el motor regex interpreta de manera única. Referencia rápida de los más comunes:

[] . ^ $ * + ? {} () \ |


Corchetes: []

Los corchetes definen un conjunto de caracteres a coincidir. Por ejemplo, [abc] coincide con cualquier ocurrencia simple de a, b o c.

ExpresiónCadena¿Coincide?
[abc]a1 coincidencia
ac2 coincidencias
Hey JudeNo coincide
abc de ca5 coincidencias

Rangos pueden expresarse con guion, ej. [a-e] equivale a [abcde]. Para invertir un conjunto, coloca un acento circunflejo ^ después del corchete de apertura, ej. [^abc] coincide con cualquier carácter excepto a, b o c.


Punto: .

El punto coincide con cualquier carácter simple excepto nueva línea.

ExpresiónCadena¿Coincide?
..aNo coincide
ac1 coincidencia
acd1 coincidencia
acde2 coincidencias (contiene 4 caracteres)

Circunflejo: ^ y Dólar: $

El circunflejo afirma inicio de cadena; el signo dólar afirma final. Por ejemplo, ^a coincide con cualquier cadena que empiece con a, mientras que a$ coincide con cualquier cadena que termine con a.

ExpresiónCadena¿Coincide?
^aa1 coincidencia
abc1 coincidencia
bacNo coincide
^ababc1 coincidencia
acbNo coincide (empieza con a pero no seguido de b)
ExpresiónCadena¿Coincide?
a$a1 coincidencia
fórmula1 coincidencia
cabNo coincide

Cuantificadores: *, +, ?, {n,m}

Estos símbolos controlan cuántas veces debe aparecer el elemento precedente.

Ejemplos:

ExpresiónCadena¿Coincide?
ma*nmn1 coincidencia
man1 coincidencia
maaan1 coincidencia
mainNo coincide (a no seguido de n)
woman1 coincidencia
ExpresiónCadena¿Coincide?
ma+nmnNo coincide (sin a)
man1 coincidencia
maaan1 coincidencia
mainNo coincide (a no seguido de n)
woman1 coincidencia
ExpresiónCadena¿Coincide?
ma?nmn1 coincidencia
man1 coincidencia
maaanNo coincide (más de un a)
mainNo coincide (a no seguido de n)
woman1 coincidencia
ExpresiónCadena¿Coincide?
a{2,3}abc datNo coincide
abc daat1 coincidencia (en daat)
aabc daaat2 coincidencias (en aabc y daaat)
aabc daaaat2 coincidencias (en aabc y daaaat)

Patrón común: [0-9]{2,4} coincide con dos a cuatro dígitos consecutivos.

ExpresiónCadena¿Coincide?
[0-9]{2,4}ab123csde1 coincidencia (en ab123csde)
12 y 3456733 coincidencias (12, 3456, 73)
1 y 2No coincide

Alternación: |

La barra vertical implementa OR lógico. Por ejemplo, a|b coincide con cualquier cadena que contenga a o b.

ExpresiónCadena¿Coincide?
a|bcdeNo coincide
ade1 coincidencia (en ade)
acdbea3 coincidencias (en acdbea)

Agrupación: ()

Los paréntesis agrupan sub-patrones y capturan subcadenas coincidentes. Ejemplo: (a|b|c)xz coincide con cualquier cadena que contenga a, b o c seguido de xz.

ExpresiónCadena¿Coincide?
(a|b|c)xzab xzNo coincide
abxz1 coincidencia (en abxz)
axz cabxz2 coincidencias (en axzbc cabxz)

Escape: \

Usa barra invertida para tratar un metacarácter como literal. Por ejemplo, \$a coincide con la secuencia literal $a en lugar de interpretar $ como ancla de fin de cadena.


Secuencias Especiales

Las secuencias especiales simplifican patrones comunes. Lista de referencia con ejemplos ilustrativos.

Inicio de Cadena: \A

ExpresiónCadena¿Coincide?
\Athethe sunCoincide
In the sunNo coincide

Límite de Palabra: \b

ExpresiónCadena¿Coincide?
\bfoofútbolCoincide
un fútbolCoincide
afútbolNo coincide
foo\bel fooCoincide
el afoo testCoincide
el afootestNo coincide

No Límite de Palabra: \B

ExpresiónCadena¿Coincide?
\BfoofútbolNo coincide
un fútbolNo coincide
afútbolCoincide
foo\Bel fooNo coincide
el afoo testNo coincide
el afootestCoincide

Dígito: \d / No Dígito: \D

ExpresiónCadena¿Coincide?
\d12abc33 coincidencias (en 12abc3)
PythonNo coincide
\D1ab34"503 coincidencias (en 1ab34"50)
1345No coincide

Espacio en Blanco: \s / No Espacio: \S

ExpresiónCadena¿Coincide?
\sPython RegEx1 coincidencia
PythonRegExNo coincide
\Sa b2 coincidencias (en a b)
No coincide

Carácter de Palabra: \w / No Palabra: \W

ExpresiónCadena¿Coincide?
\w12&": ;c 3 coincidencias (en 12": ;c)
"%> !No coincide
\W1a2%c1 coincidencia (en 1a2%c)
PythonNo coincide

Fin de Cadena: \Z

ExpresiónCadena¿Coincide?
Python\ZMe gusta Python1 coincidencia
Me gusta Python ProgramaciónNo coincide
Python es divertido.No coincide

Consejo: Usa un tester de regex online como regex101 para crear y depurar patrones rápidamente.


Usando RegEx en Python

El módulo re de Python ofrece un rico conjunto de funciones y constantes para operaciones regex. Impórtalo con:

import re

Abajo las utilidades más comunes y cómo usarlas.


re.findall()

Devuelve lista de todas las coincidencias no superpuestas en una cadena.

# Extraer todos los números de una cadena
import re
string = 'hola 12 hi 89. Qué tal 34'
pattern = '\d+'
result = re.findall(pattern, string)
print(result)  # Salida: ['12', '89', '34']

Cuando no se encuentra coincidencia, devuelve lista vacía.


re.split()

Divide una cadena en cada punto donde el patrón coincide, devolviendo lista de subcadenas.

import re
string = 'Doce:12 Ochenta y nueve:89.'
pattern = '\d+'
result = re.split(pattern, string)
print(result)  # Salida: ['Doce:', ' Ochenta y nueve:', '.']

Usa el argumento opcional maxsplit para limitar número de divisiones. Valor 0 (default) divide en cada coincidencia.

import re
string = 'Doce:12 Ochenta y nueve:89 Nueve:9.'
pattern = '\d+'
# Dividir solo en la primera ocurrencia
result = re.split(pattern, string, 1)
print(result)  # Salida: ['Doce:', ' Ochenta y nueve:89 Nueve:9.']

re.sub()

Reemplaza todas las ocurrencias de un patrón con una cadena de reemplazo.

# Eliminar todos los caracteres de espacio en blanco
import re
string = 'abc 12\nde 23 \n f45 6'
pattern = '\s+'
replace = ''
new_string = re.sub(pattern, replace, string)
print(new_string)  # Salida: abc12de23f456

Para limitar reemplazos, proporciona argumento count. Valor 0 reemplaza cada coincidencia.

new_string = re.sub(r'\s+', replace, string, 1)
print(new_string)  # Salida:
# abc12de 23
# f45 6

re.subn()

Como re.sub(), pero devuelve tupla con la nueva cadena y número de sustituciones realizadas.

new_string = re.subn(pattern, replace, string)
print(new_string)  # Salida: ('abc12de23f456', 4)

re.search()

Encuentra la primera ubicación donde el patrón coincide.

string = "Python es divertido"
match = re.search('\\APython', string)
if match:
    print("patrón encontrado dentro de la cadena")
else:
    print("patrón no encontrado")
# Salida: patrón encontrado dentro de la cadena

Objeto Match

Cuando se encuentra coincidencia, re.search() devuelve un objeto Match. Métodos y atributos comunes incluyen:

string = '39801 356, 2102 1111'
pattern = '(\\d{3}) (\\d{2})'
match = re.search(pattern, string)
if match:
    print(match.group())
    print(match.group(1))
    print(match.group(2))
    print(match.groups())
    print(match.start(), match.end(), match.span())
else:
    print("patrón no encontrado")
# Salida:
# 801 35
# 801
# 35
# ('801', '35')
# 2 8 (2, 8)

Usando Raw Strings (prefijo r)

Prefijar un literal de cadena con r trata barras invertidas como caracteres literales, previniendo secuencias de escape accidentales. Esto es especialmente útil en patrones regex.

string = '\n y \r son secuencias de escape.'
result = re.findall(r'[\n\r]', string)
print(result)  # Salida: ['\n', '\r']

Para exploración más profunda del módulo re, consulta la documentación oficial de Python.

python

  1. Palabras clave e identificadores en Python: Dominando palabras reservadas y convenciones de nomenclatura
  2. Dominando tipos de datos en Python: Guía práctica
  3. Dominando operadores en Python: Guía completa
  4. Dominando la sentencia pass en Python: Guía práctica
  5. Dominando argumentos de funciones en Python: Posicionales, por palabra clave y por defecto
  6. Dominando Diccionarios en Python: Creación, Manipulación y Técnicas Avanzadas
  7. Dominando Iteradores en Python: Cómo Funcionan y Cómo Crear los Tuyos
  8. Explicación de Closures en Python: Cómo las Funciones Anidadas Capturan Variables
  9. Dominando datetime en Python: Guía Práctica de Fechas, Horas y Zonas Horarias
  10. Dominar el Módulo time de Python: Funciones, Structs y Ejemplos Prácticos
  11. Dominar time.sleep() en Python: Mejores Prácticas, Multihilo y Ejemplos Reales