Acorde贸n de los 脥ndices
Python RegEx
馃攳 Python RegEx: Introducci贸n a las Expresiones Regulares
Las expresiones regulares (RegEx) son una secuencia de caracteres que forman un patr贸n de
b煤squeda. Se utilizan para buscar, hacer coincidir y manipular texto basado en patrones
espec铆ficos. Python tiene un m贸dulo incorporado llamado re
que permite
trabajar con expresiones regulares.
Con RegEx, puedes realizar tareas como:
- Verificar si una cadena contiene un patr贸n espec铆fico.
- Extraer todas las ocurrencias de un patr贸n en una cadena.
- Reemplazar las ocurrencias de un patr贸n con otra cadena.
- Dividir una cadena en subcadenas basadas en un patr贸n.
Las expresiones regulares son incre铆blemente poderosas y se utilizan en una amplia variedad de aplicaciones, desde la validaci贸n de datos hasta el procesamiento de texto complejo. Por ejemplo, podr铆as usar RegEx para:
- Validar formatos de correo electr贸nico.
- Extraer n煤meros de tel茅fono de un documento.
- Buscar todas las menciones de una palabra clave en un texto.
- Reemplazar todas las instancias de una palabra por otra.
En los siguientes temas, exploraremos c贸mo utilizar el m贸dulo re
de Python y
los diferentes componentes de las expresiones regulares.
RegEx Module
⚙️ El M贸dulo re
: Tu Caja de Herramientas para RegEx
Como mencionamos anteriormente, Python incluye un m贸dulo llamado re
que
proporciona las herramientas necesarias para trabajar con expresiones regulares. Para
empezar a usarlo, simplemente necesitas importarlo al inicio de tu script:
import re
Una vez importado, el m贸dulo re
pone a tu disposici贸n una serie de funciones
poderosas para realizar diversas operaciones con expresiones regulares. Estas funciones
te permiten desde buscar patrones espec铆ficos en cadenas de texto hasta realizar
reemplazos complejos y dividir cadenas basadas en criterios definidos por tus patrones
RegEx.
En los siguientes temas, exploraremos en detalle algunas de las funciones m谩s importantes
del m贸dulo re
y c贸mo utilizarlas eficazmente.
RegEx in Python
馃悕 RegEx en Python: Primeros Pasos
Trabajar con expresiones regulares en Python generalmente sigue un patr贸n sencillo:
- Importar el m贸dulo
re
: Ya lo vimos, es el primer paso para acceder a las funcionalidades de RegEx. - Definir el patr贸n: El coraz贸n de una expresi贸n regular es el patr贸n que defines. Este patr贸n es una cadena de texto con una sintaxis especial que describe lo que est谩s buscando.
- Usar una funci贸n del m贸dulo
re
: El m贸dulore
ofrece varias funciones para aplicar tu patr贸n a una cadena de texto. Las m谩s comunes sonsearch()
,findall()
,match()
,split()
ysub()
. - Analizar el resultado: La funci贸n que uses devolver谩 un resultado, que puede ser un objeto de coincidencia (si se encontr贸 el patr贸n), una lista de cadenas (con todas las coincidencias), o la cadena modificada (despu茅s de un reemplazo o divisi贸n).
Por ejemplo, si quisi茅ramos buscar la primera aparici贸n de la palabra "Python" en una cadena, podr铆amos hacer lo siguiente:
import re
texto = "Python es un lenguaje de programaci贸n popular. Aprendiendo Python."
patron = "Python"
resultado = re.search(patron, texto)
if resultado:
print("¡Se encontr贸 'Python'!")
print("Posici贸n:", resultado.start())
else:
print("No se encontr贸 'Python'.")
En los pr贸ximos temas, profundizaremos en la creaci贸n de patrones m谩s complejos y el uso
de las diferentes funciones del m贸dulo re
.
RegEx Functions
馃洜️ Funciones Esenciales del M贸dulo re
El m贸dulo re
nos brinda un conjunto de funciones poderosas para trabajar con
expresiones regulares. Cada funci贸n est谩 dise帽ada para un prop贸sito espec铆fico en la
b煤squeda y manipulaci贸n de texto.
-
search()
Busca la primera ocurrencia del patr贸n en la cadena. Si la encuentra, devuelve un objeto de coincidencia; de lo contrario, devuelve
None
.import re texto = "La lluvia en Sevilla es una maravilla." patron = "Sevilla" resultado = re.search(patron, texto) if resultado: print(f"Se encontr贸 '{patron}' en la posici贸n: {resultado.start()}") else: print(f"No se encontr贸 '{patron}'.")
-
findall()
Devuelve una lista con todas las coincidencias no superpuestas del patr贸n en la cadena. Si no hay coincidencias, devuelve una lista vac铆a.
import re texto = "Manzana, banana, manzana, cereza." patron = "manzana" resultados = re.findall(patron, texto, re.IGNORECASE) print(f"Se encontraron: {resultados}")
-
match()
Intenta hacer coincidir el patr贸n al inicio de la cadena. Si la coincidencia tiene 茅xito, devuelve un objeto de coincidencia; de lo contrario, devuelve
None
. Solo busca al principio de la cadena.import re texto = "Hola mundo" patron = "Hola" resultado = re.match(patron, texto) if resultado: print(f"Coincidencia al inicio: {resultado.group()}") else: print("No hay coincidencia al inicio.")
-
split()
Divide la cadena en una lista de subcadenas, utilizando el patr贸n como delimitador.
import re texto = "uno,dos,tres,cuatro" patron = "," resultados = re.split(patron, texto) print(f"Cadena dividida: {resultados}")
-
sub()
Reemplaza todas las ocurrencias del patr贸n en la cadena con una cadena de reemplazo.
import re texto = "Reemplazar los espacios con guiones bajos." patron = r"\s+" reemplazo = "_" nueva_cadena = re.sub(patron, reemplazo, texto) print(f"Cadena modificada: {nueva_cadena}")
Estas funciones son la base para realizar operaciones complejas de b煤squeda y manipulaci贸n de texto con expresiones regulares en Python. En los siguientes temas, exploraremos c贸mo construir patrones efectivos utilizando metacaracteres y secuencias especiales.
Metacharacters
✨ Metacaracteres: Los Ladrillos de tus Patrones RegEx
Los metacaracteres son caracteres especiales que tienen un significado predefinido en las expresiones regulares. En lugar de coincidir consigo mismos, controlan c贸mo se interpretan los patrones. Dominar los metacaracteres es crucial para construir expresiones regulares precisas y efectivas.
Aqu铆 tienes una descripci贸n detallada de algunos de los metacaracteres m谩s comunes:
-
[]
(Conjunto de caracteres)Se utiliza para definir un conjunto de caracteres que deseas coincidir. Por ejemplo:
[aeiou]
coincide con cualquier vocal min煤scula.[0-9]
coincide con cualquier d铆gito del 0 al 9.[a-zA-Z]
coincide con cualquier letra may煤scula o min煤scula.[^0-9]
coincide con cualquier car谩cter que NO sea un d铆gito (el^
al principio niega el conjunto).
-
.
(Cualquier car谩cter)El punto coincide con cualquier car谩cter individual, excepto el car谩cter de nueva l铆nea (
\n
) por defecto. Si quieres que coincida con la nueva l铆nea tambi茅n, puedes usar el flagre.DOTALL
(ore.S
). -
^
(Comienzo de la cadena)Se utiliza para asegurar que la coincidencia ocurra al principio de la cadena.
-
$
(Fin de la cadena)Se utiliza para asegurar que la coincidencia ocurra al final de la cadena.
-
*
(Cero o m谩s ocurrencias)El asterisco despu茅s de un car谩cter (o un grupo) significa que ese car谩cter puede aparecer cero o m谩s veces.
-
+
(Una o m谩s ocurrencias)El signo m谩s despu茅s de un car谩cter (o un grupo) significa que ese car谩cter debe aparecer una o m谩s veces.
-
?
(Cero o una ocurrencia)El signo de interrogaci贸n despu茅s de un car谩cter (o un grupo) significa que ese car谩cter puede aparecer cero o una vez.
-
{}
(N煤mero espec铆fico de ocurrencias)Las llaves se utilizan para especificar el n煤mero exacto de veces que un car谩cter (o grupo) debe aparecer:
{n}
: Exactamenten
ocurrencias.{n,}
:n
o m谩s ocurrencias.{n,m}
: Entren
ym
ocurrencias (ambos inclusive).
-
|
(Alternancia - OR l贸gico)La barra vertical se utiliza para especificar una de varias opciones. Por ejemplo,
gato|perro
coincide con "gato" o "perro". -
()
(Grupo de captura)Los par茅ntesis se utilizan para agrupar una parte del patr贸n. Esto permite aplicar cuantificadores a un grupo completo y tambi茅n capturar la parte de la cadena que coincide con el grupo para su posterior uso.
-
\
(Barra invertida - Escape)La barra invertida se utiliza para "escapar" metacaracteres si quieres que coincidan literalmente. Por ejemplo, para buscar un punto literal, usar铆as
\.
. Tambi茅n se utiliza para crear secuencias especiales (que veremos en el siguiente tema).
Comprender c贸mo funcionan estos metacaracteres te permitir谩 construir patrones de b煤squeda muy precisos y poderosos.
Flags
馃毄 Flags: Modificando el Comportamiento de tus RegEx
Las flags, tambi茅n conocidas como modificadores, son par谩metros opcionales que puedes
pasar a las funciones del m贸dulo re
para personalizar la forma en que se
realizan las b煤squedas de patrones. Estas flags pueden hacer que las coincidencias sean
insensibles a may煤sculas y min煤sculas, afectar c贸mo se interpretan los metacaracteres y
mucho m谩s.
Aqu铆 tienes algunas de las flags m谩s utilizadas en Python:
-
re.IGNORECASE
ore.I
Esta flag hace que la coincidencia del patr贸n no distinga entre may煤sculas y min煤sculas. Por ejemplo, el patr贸n
"python"
coincidir谩 con "Python", "PYTHON" y "python" si se usa esta flag.import re texto = "Python es diferente de PYTHON." patron = "python" resultado1 = re.search(patron, texto) resultado2 = re.search(patron, texto, re.IGNORECASE) print(f"Sin flag: {resultado1}") print(f"Con flag re.IGNORECASE: {resultado2}")
-
re.DOTALL
ore.S
Por defecto, el metacaracter
.
coincide con cualquier car谩cter excepto la nueva l铆nea (\n
). La flagre.DOTALL
hace que.
coincida con todos los caracteres, incluyendo la nueva l铆nea.import re texto = "primera l铆nea\nsegunda l铆nea" patron1 = r"." patron2 = r"." resultado1 = re.search(patron1, texto) resultado2 = re.search(patron2, texto, re.DOTALL) print(f"Sin flag (primer car谩cter): {resultado1.group()}") print(f"Con flag re.DOTALL (primer car谩cter): {resultado2.group()}")
-
re.MULTILINE
ore.M
En el modo multil铆nea, las anclas
^
y$
coinciden con el inicio y el final de cada l铆nea (no solo el inicio y el final de toda la cadena).import re texto = "l铆nea uno\nl铆nea dos\nl铆nea tres" patron1 = r"^l铆nea" patron2 = r"^l铆nea" resultado1 = re.findall(patron1, texto) resultado2 = re.findall(patron2, texto, re.MULTILINE) print(f"Sin flag re.MULTILINE: {resultado1}") print(f"Con flag re.MULTILINE: {resultado2}")
-
re.ASCII
ore.A
Hace que
\w
,\W
,\b
,\B
,\s
y\S
realicen coincidencias basadas solo en el conjunto de caracteres ASCII. -
re.DEBUG
Muestra informaci贸n de depuraci贸n sobre el patr贸n compilado.
Puedes combinar varias flags utilizando el operador |
(OR bit a bit). Por
ejemplo, re.IGNORECASE | re.DOTALL
.
El uso adecuado de las flags puede simplificar tus patrones de b煤squeda y hacerlos m谩s vers谩tiles.
Special Sequences
✨ Secuencias Especiales: Atajos para Patrones Comunes
Las secuencias especiales en RegEx son combinaciones de la barra invertida (`\`) seguida de otro car谩cter. Estas secuencias representan patrones comunes y hacen que nuestras expresiones regulares sean m谩s concisas y legibles.
Aqu铆 tienes algunas de las secuencias especiales m谩s 煤tiles:
-
\d
Coincide con cualquier d铆gito decimal (0-9). Es equivalente a la clase de car谩cter
[0-9]
.import re texto = "El a帽o es 2023." patron = r"\d{4}" resultado = re.search(patron, texto) if resultado: print(f"A帽o encontrado: {resultado.group()}")
-
\D
Coincide con cualquier car谩cter que NO sea un d铆gito. Es equivalente a la clase de car谩cter
[^0-9]
.import re texto = "C贸digo: ABC-123" patron = r"\D+" resultado = re.search(patron, texto) if resultado: print(f"Parte no num茅rica: {resultado.group()}")
-
\s
Coincide con cualquier car谩cter de espacio en blanco (espacio, tabulador, nueva l铆nea, retorno de carro, avance de formulario, tabulador vertical).
import re texto = "Palabra\tseparada\npor espacios." patron = r"\s+" resultados = re.split(patron, texto) print(f"Palabras: {resultados}")
-
\S
Coincide con cualquier car谩cter que NO sea un espacio en blanco.
import re texto = "Texto\tcon\nespacios." patron = r"\S+" resultados = re.findall(patron, texto) print(f"Elementos no espaciados: {resultados}")
-
\w
Coincide con cualquier car谩cter alfanum茅rico (letras, n煤meros y el guion bajo). Es equivalente a
[a-zA-Z0-9_]
.import re texto = "identificador_1 = 10" patron = r"\w+" resultados = re.findall(patron, texto) print(f"Elementos alfanum茅ricos: {resultados}")
-
\W
Coincide con cualquier car谩cter que NO sea alfanum茅rico. Es equivalente a
[^a-zA-Z0-9_]
.import re texto = "nombre!@dominio.com" patron = r"\W+" resultado = re.search(patron, texto) if resultado: print(f"Caracteres no alfanum茅ricos: {resultado.group()}")
-
\b
Coincide con un l铆mite de palabra. Es la posici贸n entre una palabra y un car谩cter que no es una palabra (como un espacio, una puntuaci贸n o el inicio/fin de la cadena).
import re texto = "El gato come pescado." patron1 = r"\bgato\b" # Coincide con la palabra "gato" completa patron2 = r"gato\b" # Coincide con "gato" al final de una palabra resultado1 = re.search(patron1, texto) resultado2 = re.search(patron2, texto) print(f"Coincidencia completa de 'gato': {resultado1}") print(f"Coincidencia de 'gato' al final: {resultado2}")
-
\B
Coincide con una NO frontera de palabra.
-
\\
Coincide con una barra invertida literal.
El uso inteligente de estas secuencias especiales puede simplificar enormemente la creaci贸n de patrones de b煤squeda comunes.
Sets
⚙️ Sets: Definiendo Rangos de Caracteres
Un set en RegEx se define utilizando un par de corchetes []
. Los caracteres
dentro de los corchetes representan un conjunto de caracteres que deseas coincidir. El
motor de RegEx intentar谩 encontrar CUALQUIER car谩cter que est茅 dentro de ese set en la
posici贸n dada del patr贸n.
Aqu铆 exploramos diferentes formas de definir sets:
-
Caracteres individuales
Puedes listar caracteres individuales dentro de los corchetes. Por ejemplo:
[abc]
: Coincide con "a", "b" o "c".[12345]
: Coincide con cualquier d铆gito del 1 al 5.
import re texto = "Texto con a, b y z." patron = r"[abz]" resultados = re.findall(patron, texto) print(f"Coincidencias: {resultados}")
-
Rangos de caracteres
Para especificar un rango de caracteres de forma m谩s concisa, puedes usar un guion
-
. Por ejemplo:[a-z]
: Coincide con cualquier letra min煤scula de la "a" a la "z".[A-Z]
: Coincide con cualquier letra may煤scula de la "A" a la "Z".[0-9]
: Coincide con cualquier d铆gito del 0 al 9.[a-zA-Z0-9]
: Coincide con cualquier letra (may煤scula o min煤scula) o d铆gito.
import re texto = "C贸digo: A1b2C3d4" patron = r"[A-Za-z0-9]" resultados = re.findall(patron, texto) print(f"Caracteres alfanum茅ricos: {resultados}")
-
Negaci贸n de sets
Si el primer car谩cter dentro de los corchetes es un signo de intercalaci贸n
^
, el set se niega. Esto significa que coincidir谩 con CUALQUIER car谩cter que NO est茅 dentro del set.[^abc]
: Coincide con cualquier car谩cter que no sea "a", "b" o "c".[^0-9]
: Coincide con cualquier car谩cter que no sea un d铆gito.
import re texto = "S铆mbolos !@# en el texto." patron = r"[^a-zA-Z\s.]" # Coincide con cualquier cosa que no sea letra, espacio o punto. resultados = re.findall(patron, texto) print(f"S铆mbolos encontrados: {resultados}")
-
Combinaci贸n de sets
Puedes combinar diferentes sets dentro de un mismo par de corchetes.
[a-z0-9_]
: Coincide con cualquier letra min煤scula, d铆gito o guion bajo (similar a\w
en modo ASCII).
Los sets son una herramienta fundamental para definir patrones de b煤squeda flexibles y precisos, permiti茅ndote especificar conjuntos de caracteres de manera eficiente.
The findall() Function
馃帲 La Funci贸n findall()
: Encontrando Todas las
Coincidencias
La funci贸n findall()
del m贸dulo re
es una de las herramientas
m谩s utilizadas cuando necesitas encontrar todas las ocurrencias de un patr贸n en una
cadena de texto. A diferencia de search()
, que solo devuelve la primera
coincidencia, findall()
devuelve una lista que contiene todas las
coincidencias no superpuestas del patr贸n en la cadena.
La sintaxis b谩sica de findall()
es:
re.findall(patr贸n, cadena, flags=0)
Donde:
patr贸n
: Es la expresi贸n regular que deseas buscar.cadena
: Es la cadena en la que quieres realizar la b煤squeda.flags
(opcional): Son las flags que modifican el comportamiento de la b煤squeda (comore.IGNORECASE
).
El valor de retorno de findall()
es una lista de cadenas. Cada elemento de
la lista es una de las coincidencias encontradas en la cadena.
Ejemplos de uso de findall()
-
Encontrar todas las palabras
import re texto = "El perro corre y el gato tambi茅n corre." patron = r"\b\w+\b" # Encuentra todas las palabras completas resultados = re.findall(patron, texto) print(f"Palabras encontradas: {resultados}")
-
Encontrar todos los n煤meros
import re texto = "Los precios son: 10, 25.50 y 100." patron = r"\d+(\.\d+)?" # Encuentra n煤meros enteros y decimales resultados = re.findall(patron, texto) print(f"N煤meros encontrados: {resultados}")
-
Encontrar todas las direcciones de correo electr贸nico (ejemplo simplificado)
import re texto = "Contacta con nosotros en info@example.com o ventas@otroejemplo.net." patron = r"\b\w+@\w+\.\w+\b" resultados = re.findall(patron, texto) print(f"Correos electr贸nicos encontrados: {resultados}")
Es importante recordar que si el patr贸n contiene grupos de captura (definidos por
par茅ntesis), findall()
devolver谩 una lista de tuplas, donde cada tupla
contiene las coincidencias de los grupos. Si no hay grupos de captura, devuelve una
lista de las coincidencias completas.
import re
texto = "Fechas: 2023-10-26 y 2024-01-15."
patron = r"(\d{4})-(\d{2})-(\d{2})" # Tres grupos de captura para a帽o, mes y d铆a
resultados = re.findall(patron, texto)
print(f"Fechas encontradas (grupos): {resultados}")
findall()
es una herramienta poderosa para extraer informaci贸n espec铆fica de
grandes cantidades de texto de manera eficiente.
The search() Function
馃攳 La Funci贸n search()
: Buscando la Primera
Coincidencia
La funci贸n search()
del m贸dulo re
busca la primera ubicaci贸n
donde el patr贸n de expresi贸n regular produce una coincidencia en la cadena. A diferencia
de findall()
, que devuelve todas las coincidencias, search()
se detiene en la primera que encuentra.
La sintaxis b谩sica de search()
es:
re.search(patr贸n, cadena, flags=0)
Donde:
patr贸n
: Es la expresi贸n regular que deseas buscar.cadena
: Es la cadena en la que quieres realizar la b煤squeda.flags
(opcional): Son las flags que modifican el comportamiento de la b煤squeda.
El valor de retorno de search()
es un objeto de coincidencia (Match Object)
si el patr贸n se encuentra en la cadena. Si el patr贸n no se encuentra, devuelve
None
.
Trabajando con el Objeto de Coincidencia
Cuando search()
encuentra una coincidencia, devuelve un objeto que contiene
informaci贸n sobre esa coincidencia, como:
- La cadena original.
- La posici贸n de inicio y fin de la coincidencia.
- El grupo o grupos que coinciden con el patr贸n (si se usaron par茅ntesis).
Puedes acceder a esta informaci贸n utilizando m茅todos del objeto de coincidencia, como
span()
, start()
, end()
y group()
.
Exploraremos el objeto de coincidencia en detalle m谩s adelante.
Ejemplos de uso de search()
-
Buscar la primera palabra que empiece con "P"
import re texto = "La primera palabra es Python." patron = r"\bP\w+" resultado = re.search(patron, texto) if resultado: print(f"Primera palabra con 'P' encontrada: {resultado.group()}") print(f"Posici贸n de inicio: {resultado.start()}") print(f"Posici贸n de fin: {resultado.end()}") else: print("No se encontr贸 ninguna palabra que empiece con 'P'.")
-
Verificar si una cadena contiene un n煤mero
import re texto = "El c贸digo es ABC123XYZ." patron = r"\d+" resultado = re.search(patron, texto) if resultado: print("Se encontr贸 un n煤mero.") print(f"N煤mero encontrado: {resultado.group()}") else: print("No se encontr贸 ning煤n n煤mero.")
-
Buscar una fecha con un formato espec铆fico
import re texto = "La fecha del evento es 2023-11-10." patron = r"\d{4}-\d{2}-\d{2}" resultado = re.search(patron, texto) if resultado: print(f"Fecha encontrada: {resultado.group()}") else: print("No se encontr贸 ninguna fecha con el formato YYYY-MM-DD.")
search()
es ideal cuando solo necesitas encontrar la primera ocurrencia de
un patr贸n y obtener informaci贸n sobre ella.
The split() Function
✂️ La Funci贸n split()
: Dividiendo Cadenas con
RegEx
La funci贸n split()
del m贸dulo re
divide una cadena en una lista
de subcadenas, utilizando las ocurrencias del patr贸n como delimitadores. Es una forma
poderosa y flexible de segmentar texto basado en criterios definidos por expresiones
regulares.
La sintaxis b谩sica de split()
es:
re.split(patr贸n, cadena, maxsplit=0, flags=0)
Donde:
patr贸n
: Es la expresi贸n regular que se utilizar谩 como delimitador.cadena
: Es la cadena que se va a dividir.maxsplit
(opcional): Si se especifica, indica el n煤mero m谩ximo de divisiones que se realizar谩n. Si es 0 (o no se especifica), se realizar谩n todas las divisiones posibles.flags
(opcional): Son las flags que modifican el comportamiento de la b煤squeda del patr贸n.
El valor de retorno de split()
es una lista de las subcadenas resultantes de
la divisi贸n.
Ejemplos de uso de split()
-
Dividir una cadena por comas y espacios
import re texto = "manzana, pera, banana,uva" patron = r",\s*" # Coincide con una coma seguida de cero o m谩s espacios resultados = re.split(patron, texto) print(f"Lista de frutas: {resultados}")
-
Dividir una cadena por n煤meros
import re texto = "parte123parte456parte789" patron = r"\d+" resultados = re.split(patron, texto) print(f"Partes divididas por n煤meros: {resultados}")
-
Dividir una cadena por saltos de l铆nea (m谩ximo 2 divisiones)
import re texto = "L铆nea 1\nL铆nea 2\nL铆nea 3\nL铆nea 4" patron = r"\n" resultados = re.split(patron, texto, maxsplit=2) print(f"Dividido por saltos de l铆nea (m谩ximo 2): {resultados}")
Es importante notar que si el patr贸n contiene grupos de captura, las cadenas que coinciden con los grupos tambi茅n se incluir谩n en la lista resultante, intercaladas con las subcadenas divididas.
import re
texto = "palabra1(separador)palabra2"
patron = r"(\(|\))" # Coincide con par茅ntesis de apertura o cierre (y los captura)
resultados = re.split(patron, texto)
print(f"Dividido con captura de delimitadores: {resultados}")
La funci贸n split()
ofrece una gran flexibilidad para segmentar texto de
manera inteligente bas谩ndose en patrones complejos.
The sub() Function
馃攧 La Funci贸n sub()
: Reemplazando Texto con RegEx
La funci贸n sub()
del m贸dulo re
permite reemplazar todas las
ocurrencias de un patr贸n en una cadena con una nueva subcadena. Es una herramienta muy
poderosa para realizar transformaciones de texto complejas.
La sintaxis b谩sica de sub()
es:
re.sub(patr贸n, reemplazo, cadena, count=0, flags=0)
Donde:
patr贸n
: Es la expresi贸n regular que se buscar谩 en la cadena.reemplazo
: Es la cadena con la que se reemplazar谩n las coincidencias del patr贸n. Tambi茅n puede ser una funci贸n (que recibe el objeto de coincidencia como argumento).cadena
: Es la cadena en la que se realizar谩n las sustituciones.count
(opcional): Especifica el n煤mero m谩ximo de reemplazos que se realizar谩n. Si es 0 (o no se especifica), se reemplazar谩n todas las ocurrencias.flags
(opcional): Son las flags que modifican el comportamiento de la b煤squeda del patr贸n.
El valor de retorno de sub()
es la nueva cadena resultante despu茅s de
realizar los reemplazos.
Ejemplos de uso de sub()
-
Reemplazar todos los espacios con guiones bajos
import re texto = "Este es un texto con espacios." patron = r"\s+" reemplazo = "_" nueva_cadena = re.sub(patron, reemplazo, texto) print(f"Cadena modificada: {nueva_cadena}")
-
Eliminar todos los d铆gitos de una cadena
import re texto = "Producto C贸digo: ABC-123-DEF-456" patron = r"\d+" reemplazo = "" nueva_cadena = re.sub(patron, reemplazo, texto) print(f"Cadena sin d铆gitos: {nueva_cadena}")
-
Reemplazar la primera ocurrencia de una palabra (con
count=1
)import re texto = "La casa azul tiene una puerta azul." patron = r"\bazul\b" reemplazo = "verde" nueva_cadena = re.sub(patron, reemplazo, texto, count=1) print(f"Cadena con el primer reemplazo: {nueva_cadena}")
-
Usando una funci贸n como reemplazo (para cambiar may煤sculas a min煤sculas)
import re def minuscula(coincidencia): return coincidencia.group(0).lower() texto = "ALGUNAS PALABRAS EN MAY脷SCULAS." patron = r"[A-Z]+" nueva_cadena = re.sub(patron, minuscula, texto) print(f"Cadena en min煤sculas: {nueva_cadena}")
La funci贸n sub()
es extremadamente vers谩til y permite realizar
modificaciones de texto sofisticadas basadas en patrones definidos por expresiones
regulares.
Match Object
馃摝 El Objeto de Coincidencia (Match Object)
Cuando utilizas funciones como re.search()
o re.match()
y se
encuentra una coincidencia, estas funciones no devuelven directamente la cadena
coincidente. En su lugar, devuelven un objeto llamado **Match Object**. Este objeto
contiene informaci贸n detallada sobre la coincidencia, incluyendo la cadena coincidente
en s铆, su ubicaci贸n dentro de la cadena original y cualquier grupo capturado por el
patr贸n.
M茅todos del Objeto de Coincidencia
El objeto de coincidencia proporciona varios m茅todos 煤tiles para acceder a la informaci贸n de la coincidencia:
-
group()
Devuelve la parte de la cadena donde hubo coincidencia. Si se proporcionan uno o m谩s argumentos (n煤meros de grupo), devuelve la subcadena (o tupla de subcadenas) coincidente con ese grupo.
import re texto = "Nombre: Juan P茅rez, Edad: 30" patron = r"Nombre: (\w+) (\w+), Edad: (\d+)" resultado = re.search(patron, texto) if resultado: print(f"Coincidencia completa: {resultado.group()}") print(f"Nombre completo: {resultado.group(0)}") # Equivalente a group() sin argumentos print(f"Primer nombre (grupo 1): {resultado.group(1)}") print(f"Apellido (grupo 2): {resultado.group(2)}") print(f"Edad (grupo 3): {resultado.group(3)}") print(f"Todos los grupos: {resultado.groups()}") # Devuelve una tupla con todos los grupos else: print("No se encontr贸 coincidencia.")
-
start()
Devuelve la posici贸n inicial de la coincidencia.
import re texto = "El n煤mero 123 est谩 aqu铆." patron = r"\d+" resultado = re.search(patron, texto) if resultado: print(f"La coincidencia comienza en la posici贸n: {resultado.start()}")
-
end()
Devuelve la posici贸n final de la coincidencia (el 铆ndice del car谩cter siguiente al 煤ltimo de la coincidencia).
import re texto = "El n煤mero 123 est谩 aqu铆." patron = r"\d+" resultado = re.search(patron, texto) if resultado: print(f"La coincidencia termina en la posici贸n: {resultado.end()}")
-
span()
Devuelve una tupla que contiene las posiciones inicial y final de la coincidencia:
(start, end)
.import re texto = "El n煤mero 123 est谩 aqu铆." patron = r"\d+" resultado = re.search(patron, texto) if resultado: print(f"El rango de la coincidencia es: {resultado.span()}")
Comprender y utilizar los m茅todos del objeto de coincidencia te permite extraer informaci贸n espec铆fica y detallada sobre las partes de la cadena que coinciden con tu patr贸n de expresi贸n regular.
0 Comentarios
Si desea contactar comigo, lo puede hacer atravez deste formulario gracias