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: Guía Práctica con el Módulo re

Una expresión regular es una secuencia especial de caracteres que ayuda a buscar o encontrar cadenas usando una sintaxis especializada en un patrón. Son ampliamente usadas en el mundo UNIX.

El módulo re de Python proporciona soporte completo para expresiones regulares tipo Perl. Lanza re.error si ocurre un error al compilar o usar una expresión regular.

Usaremos cadenas raw como r'expresion' para evitar confusión con caracteres especiales.

La Función match

Intenta hacer coincidir el patrón RE al principio de la cadena.

re.match(pattern, string, flags=0)

Parámetros: pattern (expresión regular), string (cadena a buscar), flags (modificadores con OR bitwise).

Retorna un objeto match si tiene éxito, None si falla. Usa group(num) o groups() para obtener la expresión coincidente.

Ejemplo

#!/usr/bin/python
import re
line = "Cats are smarter than dogs"
matchObj = re.match(r'(.*) are (.*?) .*', line, re.M | re.I)
if matchObj:
    print("matchObj.group():", matchObj.group())
    print("matchObj.group(1):", matchObj.group(1))
    print("matchObj.group(2):", matchObj.group(2))
else:
    print("No match!!")

Resultado: Cats are smarter than dogs, grupos: Cats, smarter.

La Función search

Busca la primera ocurrencia del patrón RE en cualquier parte de la cadena.

re.search(pattern, string, flags=0)

Parámetros iguales que match, pero busca en toda la cadena. Retorna objeto match o None.

Ejemplo

#!/usr/bin/python
import re
line = "Cats are smarter than dogs"
searchObj = re.search(r'(.*) are (.*?) .*', line, re.M | re.I)
if searchObj:
    print("searchObj.group():", searchObj.group())
    print("searchObj.group(1):", searchObj.group(1))
    print("searchObj.group(2):", searchObj.group(2))
else:
    print("Nothing found!!")

Coincidencia vs Búsqueda

match verifica solo al inicio de la cadena; search verifica en cualquier posición (comportamiento por defecto de Perl).

Ejemplo

#!/usr/bin/python
import re
line = "Cats are smarter than dogs"
matchObj = re.match(r'dogs', line, re.M | re.I)
searchObj = re.search(r'dogs', line, re.M | re.I)
# match: No match!! | search: dogs

Búsqueda y Reemplazo

El método sub es uno de los más importantes del módulo re.

re.sub(pattern, repl, string, max=0)

Reemplaza todas las ocurrencias del patrón en la cadena con repl, a menos que se especifique max. Retorna la cadena modificada.

Ejemplo

#!/usr/bin/python
import re
phone = "2004-959-559 # This is Phone Number"
# Eliminar comentarios estilo Python
num = re.sub(r'#.*$', "", phone)
print("Phone Num:", num)
# Eliminar todo excepto dígitos
num = re.sub(r'\D', "", phone)
print("Phone Num:", num)

Resultado: 2004-959-559 y 2004959559.

Modificadores de Expresiones Regulares (Banderas)

BanderaDescripción
re.ICoincidencia sin distinción de mayúsculas/minúsculas.
re.LInterpreta palabras según configuración local actual.
re.M$ coincide con fin de línea (no solo fin de cadena); ^ coincide con inicio de línea.
re.SEl punto (.) coincide con cualquier carácter, incluyendo salto de línea.
re.UInterpreta letras según juego de caracteres Unicode.
re.XSintaxis "más limpia": ignora espacios en blanco y trata # sin escape como comentario.

Patrones de Expresiones Regulares

Excepto caracteres de control (+ ? . * ^ $ ( ) [ ] { } | \), todos los caracteres coinciden consigo mismos. Escapa un carácter de control con barra invertida.

PatrónDescripción
^Inicio de línea.
$Fin de línea.
.Cualquier carácter excepto salto de línea.
[...]Cualquier carácter en corchetes.
[^...]Cualquier carácter NO en corchetes.
re*0 o más ocurrencias de la expresión anterior.
re+1 o más ocurrencias.
re?0 o 1 ocurrencia.
re{n}Exactamente n ocurrencias.
re{n,}n o más ocurrencias.
re{n,m}Entre n y m ocurrencias.
a|bCoincide con a o b.
(re)Agrupa y recuerda texto coincidente.
(?imx)Activa opciones i, m, x temporalmente.
(?-imx)Desactiva opciones i, m, x temporalmente.
(?:re)Agrupa sin recordar (non-capturing).
(?P...)Grupo con nombre (Python extension).
\wCaracteres de palabra [A-Za-z0-9_].
\WNo caracteres de palabra.
\sEspacio en blanco [\t\n\r\f].
\SNo espacio en blanco.
\dDígitos [0-9].
\DNo dígitos.
\AInicio de cadena.
\ZFin de cadena (antes de salto de línea final si existe).
\zFin de cadena absoluto.
\bLímite de palabra (fuera de corchetes).
\BNo límite de palabra.
\1...\9Referencia a subexpresión agrupada n-ésima.

Ejemplos Prácticos

Clases de Caracteres

EjemploDescripción
[Pp]ython"Python" o "python"
rub[ye]"ruby" o "rube"
[aeiou]Cualquier vocal minúscula
[0-9]Cualquier dígito
[a-zA-Z0-9]Letra o dígito
[^aeiou]Cualquier cosa excepto vocal minúscula

Clases Especiales

EjemploDescripción
\dDígito: [0-9]
\DNo dígito: [^0-9]
\sEspacio en blanco: [ \t\r\n\f]
\SNo espacio en blanco
\wCarácter de palabra: [A-Za-z0-9_]
\WNo carácter de palabra

Repetición

EjemploDescripción
ruby?"rub" o "ruby" (y opcional)
ruby*"rub" + 0 o más "y"
ruby+"rub" + 1 o más "y"
\d{3}Exactamente 3 dígitos
\d{3,}3 o más dígitos
\d{3,5}3, 4 o 5 dígitos

Repetición No Codiciosa (Nongreedy)

EjemploDescripción
<.*>Codicioso: coincide "<python>perl>"
<.*?>No codicioso: coincide "<python>" en "<python>perl>"

Agrupación con Paréntesis

EjemploDescripción
\D\d+Sin grupo: + repite \d
(\D\d)+Agrupado: + repite par \D\d
([Pp]ython(, )?)+"Python", "Python, python, python", etc.

Referencias Hacia Atrás (Backreferences)

EjemploDescripción
([Pp])ython\1ailsCoincide "python\1ails" o "Python\1ails"
(['"])[^\1]*\1Cadena entre comillas simples o dobles

Alternativas

EjemploDescripción
python|perl"python" o "perl"
rub(y|le)"ruby" o "ruble"
Python(!+|\?)"Python" seguido de uno o más ! o un ?

Anclas

EjemploDescripción
^Python"Python" al inicio de cadena/línea
Python$"Python" al final de cadena/línea
\APython"Python" al inicio de cadena
Python\Z"Python" al final de cadena
\bPython\b"Python" en límite de palabra
Python(?=!)"Python" si seguido de ! (lookahead positivo)
Python(?!\!)"Python" si NO seguido de ! (lookahead negativo)

python

  1. Expresiones regulares en C#: Guía práctica
  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. Expresiones Regulares en Python (Módulo re) – Guía Práctica
  10. Dominando datetime en Python: Guía Práctica de Fechas, Horas y Zonas Horarias
  11. Expresiones Regulares en Java: Dominando la Coincidencia de Patrones con java.util.regex