Solución al Ejercicio: Convertir a Snail Case
📋 Copiar código
import re
def convertir_a_snail_case(texto):
"""
Convierte una cadena de texto a Snail Case (minúsculas separadas por guion bajo).
Args:
texto: La cadena de texto de entrada.
Returns:
La cadena convertida a Snail Case.
"""
# Reemplazar caracteres no alfanuméricos con espacios
texto_limpio = re.sub(r'[^a-zA-Z0-9\s]', '', texto)
# Convertir mayúsculas a minúsculas y dividir por mayúsculas o espacios/guiones
palabras = re.findall(r'[A-Z]?[a-z]+|[A-Z]+(?=[A-Z0-9]|\b)|[0-9]+', texto_limpio)
# Unir las palabras con guion bajo y convertir a minúsculas
snail_case = '_'.join(palabra.lower() for palabra in palabras)
return snail_case
# Ejemplos de uso
texto1 = "Hola Mundo"
resultado1 = convertir_a_snail_case(texto1)
print(f"'{texto1}' en Snail Case: '{resultado1}'")
texto2 = "Texto-Con-Guiones"
resultado2 = convertir_a_snail_case(texto2)
print(f"'{texto2}' en Snail Case: '{resultado2}'")
texto3 = "TextoConMayusculas"
resultado3 = convertir_a_snail_case(texto3)
print(f"'{texto3}' en Snail Case: '{resultado3}'")
texto4 = "Texto Con Numeros 123"
resultado4 = convertir_a_snail_case(texto4)
print(f"'{texto4}' en Snail Case: '{resultado4}'")
texto5 = "TEXTO EN MAYUSCULAS"
resultado5 = convertir_a_snail_case(texto5)
print(f"'{texto5}' en Snail Case: '{resultado5}'")
texto6 = "Texto con caracteres!@# especiales"
resultado6 = convertir_a_snail_case(texto6)
print(f"'{texto6}' en Snail Case: '{resultado6}'")
texto7 = ""
resultado7 = convertir_a_snail_case(texto7)
print(f"'' en Snail Case: '{resultado7}'")
Explicación del Código:
-
Importa el módulo re
:
Se utiliza para trabajar con expresiones regulares para la manipulación del
texto.
-
Función
convertir_a_snail_case(texto)
:
- Limpieza de caracteres no
alfanuméricos:
texto_limpio = re.sub(r'[^a-zA-Z0-9\s]',
'', texto)
: Reemplaza cualquier carácter que no sea una letra
(mayúscula o minúscula), un número o un espacio en blanco con una
cadena vacía, eliminándolos.
- División en palabras:
palabras = re.findall(r'[A-Z]?[a-z]+|[A-Z]+(?=[A-Z0-9]|\b)|[0-9]+',
texto_limpio)
: Utiliza re.findall()
para
encontrar todas las "palabras" en el texto limpio. La expresión
regular busca:
- Una letra mayúscula opcional
seguida de una o más letras minúsculas (
[A-Z]?[a-z]+
).
- Una o más letras mayúsculas
seguidas de otra mayúscula, un número o un límite de palabra (
[A-Z]+(?=[A-Z0-9]|\b)
).
Esto ayuda a separar acrónimos.
- Uno o más números (
[0-9]+
).
- Unión en Snail Case:
snail_case = '_'.join(palabra.lower()
for palabra in palabras)
: Itera a través de la lista de
palabras
, convierte cada palabra
a minúsculas
using .lower()
, y luego las une utilizando un guion
bajo (_
) como separador.
- Devuelve la cadena resultante en Snail
Case.
Ejemplos de Uso:
Los ejemplos muestran cómo la función convierte
diferentes cadenas de texto a Snail Case, manejando mayúsculas, minúsculas,
guiones, espacios y eliminando caracteres especiales.