Solución al Ejercicio: Extraer info de registro
📋 Copiar código
import re
def extraer_info_de_registro(registros):
"""
Extrae el valor asociado a 'VALOR' de líneas de registro con un formato específico.
Args:
registros: Una lista de cadenas de texto (líneas de registro).
Returns:
Una lista de los datos extraídos de las líneas de registro.
"""
datos_extraidos = []
patron = re.compile(r'\[\w+\] - .*? - VALOR: (.*)')
for linea in registros:
coincidencia = patron.search(linea)
if coincidencia:
datos_extraidos.append(coincidencia.group(1).strip())
return datos_extraidos
# Ejemplos de uso
registros_ejemplo = [
"[INFO] - Inicio del proceso - VALOR: 123",
"[WARNING] - Error en la conexión - VALOR: fallo",
"[DEBUG] - Variable x asignada - VALOR: abc",
"[ERROR] - Archivo no encontrado - VALOR: None",
"Línea sin el formato esperado",
"[INFO] - Fin del proceso - VALOR: 456 "
]
resultado = extraer_info_de_registro(registros_ejemplo)
print(f"Datos extraídos del registro: {resultado}")
Explicación del Código:
-
import re
:
- Importa el módulo
re
para
trabajar con expresiones regulares.
-
def
extraer_info_de_registro(registros):
:
- Define una función llamada
extraer_info_de_registro
que toma una lista de cadenas de texto (registros
)
como entrada.
-
datos_extraidos = []
:
- Inicializa una lista vacía llamada
datos_extraidos
para almacenar los valores extraídos.
-
patron = re.compile(r'\[\w+\] -
.*? - VALOR: (.*)')
:
- Compila una expresión regular para buscar
el patrón en cada línea de registro:
\[\w+\]
: Coincide con
un texto entre corchetes (el nivel), donde \w+
significa uno o más caracteres de palabra.
-
: Coincide con un
espacio, un guion y otro espacio.
.*?
: Coincide con
cualquier carácter (.
) cero o más veces (*?
)
de forma no codiciosa (para que coincida con la parte del mensaje
más corta posible antes de "VALOR").
- VALOR:
: Coincide con
el texto literal " - VALOR: ".
(.*)
: Coincide con
cualquier carácter (.
) cero o más veces (*
)
y lo captura en un grupo (()
). Este es el valor que
queremos extraer.
-
for linea in registros:
:
- Itera a través de cada
linea
en la lista de registros
.
-
coincidencia =
patron.search(linea)
:
- Intenta encontrar la primera ocurrencia
del
patron
en la linea
. Si se encuentra,
coincidencia
será un objeto de coincidencia; de lo contrario,
será None
.
-
if coincidencia:
:
- Verifica si se encontró una coincidencia.
-
datos_extraidos.append(coincidencia.group(1).strip())
:
- Si hubo una coincidencia:
coincidencia.group(1)
:
Extrae el texto capturado por el primer grupo en el patrón (que es
el valor después de "VALOR: ").
.strip()
: Elimina
cualquier espacio en blanco al principio o al final del valor
extraído.
datos_extraidos.append(...)
:
Añade el valor extraído a la lista datos_extraidos
.
-
return datos_extraidos
:
- Después de procesar todas las líneas en
registros
, devuelve la lista datos_extraidos
que contiene todos los valores extraídos.
Ejemplos de Uso:
El ejemplo muestra cómo la función procesa una
lista de líneas de registro y extrae los valores asociados a "VALOR" de aquellas
líneas que siguen el formato esperado. Las líneas que no coinciden con el patrón
son ignoradas.