Extrae múltiples piezas de información de un log de servidor en un solo paso, asignándolas directo a variables con nombre.
Extract multiple pieces of information from a server log in one step, assigning them directly to named variables.
Este ejercicio es solo para aprendizaje y pruebas. No ejecutes scripts contra datos reales, ambientes de producción, APIs externas, portales con login, datos sensibles, sistemas críticos o repositorios empresariales sin autorización, respaldos, pruebas previas, permisos mínimos, control de cambios y cumplimiento de los protocolos de ciberseguridad de tu organización.
This exercise is for learning and testing only. Do not run scripts against real data, production environments, external APIs, login portals, sensitive data, critical systems, or enterprise repositories without authorization, backups, prior testing, least-privilege permissions, change control, and compliance with your organization's cybersecurity protocols.
Crear expresiones regulares con grupos nombrados para transformar texto no estructurado en columnas claras.
Create regular expressions with named groups to transform unstructured text into clear columns.
| log_line |
|---|
| 10.0.0.1 - Admin - ERROR |
| 10.0.0.2 - Maria - OK |
| 10.0.0.3 - John - WARNING |
import re
log = "10.0.0.1 - Admin - ERROR"
patron = r"(?P<ip>[\d.]+)\s-\s(?P<usuario>\w+)\s-\s(?P<estado>\w+)"
match = re.search(patron, log)
print(match.groupdict())
# {'ip': '10.0.0.1', 'usuario': 'Admin', 'estado': 'ERROR'}| ip | usuario | estado |
|---|---|---|
| 10.0.0.1 | Admin | ERROR |
| 10.0.0.2 | Maria | OK |
| 10.0.0.3 | John | WARNING |
# ==========================================================
# Python Advanced Topic 13
# Regex with Named Capture Groups
# ==========================================================
import re
import pandas as pd
logs = [
"10.0.0.1 - Admin - ERROR",
"10.0.0.2 - Maria - OK",
"10.0.0.3 - John - WARNING",
]
pattern = r"(?P<ip>[\d.]+)\s-\s(?P<usuario>\w+)\s-\s(?P<estado>\w+)"
records = []
for line in logs:
match = re.search(pattern, line)
if match:
records.append(match.groupdict())
else:
records.append({"ip": None, "usuario": None, "estado": None})
df = pd.DataFrame(records)
df.to_csv("parsed_server_logs.csv", index=False)
print(df)ip usuario estado 0 10.0.0.1 Admin ERROR 1 10.0.0.2 Maria OK 2 10.0.0.3 John WARNING
Named capture groups convierten texto difícil en columnas comprensibles, reduciendo errores al parsear logs o reportes no estructurados.
Named capture groups turn difficult text into understandable columns, reducing errors when parsing logs or unstructured reports.