es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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 y Future Core lapix Carry Me Away Extended Mix

Tags:  , ,

Answer

  1. Avatar for 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:

    import re
    
    def clean_special(input_str):
        # Define el patrón regex para encontrar cualquier carácter no alfanumérico o de espacio en blanco
        pattern = r'[^a-zA-Z0-9\s]'
    
        # Reemplaza todas las coincidencias con un espacio
        cleaned_str = re.sub(pattern, ' ', input_str)
    
        # Elimina cualquier espacio consecutivo y recorta la cadena
        cleaned_str = re.sub(r'\s+', ' ', cleaned_str).strip()
    
        return cleaned_str
    
    # Ejemplo de uso
    original_string_1 = 'Sabai, With Løve & Nevve - Falling For You (Official Music Video)'
    original_string_2 = '「Future Core」[lapix] Carry Me Away (Extended Mix)'
    
    cleaned_string_1 = clean_special(original_string_1)
    cleaned_string_2 = clean_special(original_string_2)
    
    print(f'{original_string_1=}\n{cleaned_string_1=}')
    print(f'{original_string_2=}\n{cleaned_string_2=}')
    

    Resultado:

    original_string_1='Sabai, With Løve & Nevve - Falling For You (Official Music Video)'
    cleaned_string_1='Sabai With Løve Nevve Falling For You Official Music Video'
    
    original_string_2='「Future Core」[lapix] Carry Me Away (Extended Mix)'
    cleaned_string_2='Future Core lapix Carry Me Away Extended Mix'
    

    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ón re.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ón re.sub() nuevamente. También utilizamos el método strip() para eliminar cualquier espacio en blanco al principio o al final de la cadena resultante.

Comments are closed.