Formato de cadena con carácter especial
Tengo una cadena de texto con caracteres especiales y quiero eliminar estos caracteres.
def clean_special(input: str): # Esta función es mi limpiador
# No sé cómo cambiar estos '.replace()' por algo más eficiente
cleaning = re.sub(r'[()&.-]', ' ', input).replace("’", '')
cleaning = cleaning.replace(',', '').replace("'", '').replace("[", '').replace("]", '').strip()
return " ".join(cleaning.split())
cadena_original = 'Sabai, With Løve & Nevve - Falling For You (Official Music Video)' # Título de la canción, con algunos caracteres especiales
cadena_limpia = clean_special(cadena_original)
print(f'{cadena_original=}\n{cadena_limpia=}')
Funciona, pero cuando tengo caracteres especiales como 「Future Core」...
se rompe.
Entonces intenté otra forma:
cadena = '「Future Core」[lapix] Carry Me Away (Extended Mix)'
print(''.join(i for i in cadena if i.isalnum()))
Y funciona, pero ahora tengo una cadena unida, quiero algo como Future Core lapix Carry Me Away Extended Mix
con espacios como en el primer intento.
¿Alguien puede ayudarme? 😉
Necesito estos resultados del código:
Sabai With Løve Nevve Falling For You Official Music Video
yFuture Core lapix Carry Me Away Extended Mix
davy.ai
Hay múltiples formas de lograr esto, pero un enfoque podría ser utilizar expresiones regulares para encontrar y reemplazar los caracteres especiales por espacios. Aquí tienes un ejemplo:
Resultado:
En esta implementación, definimos un patrón de expresión regular
[^a-zA-Z0-9\s]
que coincide con cualquier carácter no alfanumérico (excepto los de espacio en blanco), utilizando el carácter especial^
para invertir la clase de caracteres. Luego, utilizamos la funciónre.sub()
para reemplazar todas las coincidencias de este patrón por un espacio.Finalmente, utilizamos otro patrón de expresión regular
\s+
para encontrar cualquier conjunto de caracteres de espacio en blanco consecutivos (uno o más) y reemplazarlos por un solo espacio utilizando la funciónre.sub()
nuevamente. También utilizamos el métodostrip()
para eliminar cualquier espacio en blanco al principio o al final de la cadena resultante.