.
Solución al Ejercicio: Extraer clave-valor
📋 Copiar código
import re
def extraer_clave_valor(texto):
"""
Extrae información de clave-valor de un texto donde cada par está en
la forma "clave: valor".
Args:
texto: La cadena de texto de entrada (puede contener múltiples líneas).
Returns:
Un diccionario con las claves y valores extraídos.
"""
datos = {}
for linea in texto.strip().split('\n'):
coincidencia = re.match(r'^\s*([^:]+):\s*(.+?)\s*$', linea)
if coincidencia:
clave = coincidencia.group(1).strip()
valor = coincidencia.group(2).strip()
datos[clave] = valor
return datos
# Ejemplos de uso
texto1 = """
nombre: Juan Pérez
edad: 30
ciudad: Madrid
profesión: ingeniero
"""
resultado1 = extraer_clave_valor(texto1)
print(f"Datos extraídos:\n{resultado1}")
texto2 = """
idioma: español
version: 1.0
autor: IA
"""
resultado2 = extraer_clave_valor(texto2)
print(f"\nDatos extraídos:\n{resultado2}")
texto3 = """
clave_simple: valor_simple
otra_clave: otro valor
# línea comentada
sin_formato
"""
resultado3 = extraer_clave_valor(texto3)
print(f"\nDatos extraídos:\n{resultado3}")
texto4 = "unica_clave: unico_valor"
resultado4 = extraer_clave_valor(texto4)
print(f"\nDatos extraídos:\n{resultado4}")
texto5 = ""
resultado5 = extraer_clave_valor(texto5)
print(f"\nDatos extraídos:\n{resultado5}")
Explicación del Código:
-
import re:
- Importa el módulo
re para
trabajar con expresiones regulares.
-
def extraer_clave_valor(texto)::
- Define una función llamada
extraer_clave_valor que toma una cadena de texto (texto)
como entrada.
-
datos = {}:
- Inicializa un diccionario vacío
datos para almacenar las claves y valores extraídos.
-
for linea in texto.strip().split('\n')::
- Procesa cada línea del texto:
texto.strip(): Elimina
cualquier espacio en blanco al principio o al final del texto.
.split('\n'): Divide el
texto en una lista de líneas, utilizando el carácter de nueva línea
como delimitador.
-
coincidencia =
re.match(r'^\s*([^:]+):\s*(.+?)\s*$', linea):
- Intenta hacer coincidir la línea con el
patrón de clave-valor usando
re.match() (que busca una
coincidencia al principio de la cadena):
^: Coincide con el
inicio de la línea.
\s*: Coincide con cero
o más espacios en blanco.
([^:]+): Coincide con
uno o más caracteres que no sean dos puntos (:) y los
captura en el primer grupo (la clave).
:: Coincide con el
carácter de dos puntos literal.
\s*: Coincide con cero
o más espacios en blanco después de los dos puntos.
(.+?): Coincide con
uno o más caracteres (cualquiera) de forma no codiciosa (?)
y los captura en el segundo grupo (el valor). La no codicia asegura
que coincida hasta el siguiente espacio en blanco antes del final de
la línea.
\s*: Coincide con cero
o más espacios en blanco al final del valor.
$: Coincide con el
final de la línea.
-
if coincidencia::
- Si la línea coincide con el patrón de
clave-valor.
-
clave = coincidencia.group(1).strip():
- Extrae el texto capturado en el primer
grupo (la clave) y elimina cualquier espacio en blanco al principio o al
final.
-
valor = coincidencia.group(2).strip():
- Extrae el texto capturado en el segundo
grupo (el valor) y elimina cualquier espacio en blanco al principio o al
final.
-
datos[clave] = valor:
- Agrega la clave y el valor al
diccionario
datos.
-
return datos:
- Devuelve el diccionario con los pares
clave-valor extraídos.
Ejemplos de Uso:
Los ejemplos muestran cómo la función procesa
cadenas de texto con diferentes formatos (múltiples líneas, una sola línea,
líneas sin formato) y extrae los pares clave-valor que cumplen con el patrón
esperado. Las líneas que no siguen el formato son ignoradas.