Eliminar caracteres de una cadena en Python o reemplazarlos

Las cadenas en Python son inmutables, pero es posible utilizar métodos para crear una nueva cadena que contenga solo las partes deseadas del original.

¿Qué significa que las cadenas sean inmutables?

La inmutabilidad implica que una vez que se ha creado un objeto, ya no se puede modificar. En Python, todas las cadenas son inmutables. Al borrar caracteres de una cadena utilizando métodos de Python, estás creando una nueva cadena que contiene solo determinados elementos de la original. La cadena original permanece intacta. Esta propiedad de las cadenas permite manejar de manera eficiente la memoria en Python y ayuda a evitar resultados inesperados al trabajar con cadenas.

Eliminar determinados caracteres de una cadena

Para eliminar determinados caracteres de una cadena, puedes utilizar por ejemplo str.replace() o re.sub() con una expresión regular que represente los caracteres o el patrón que se va a eliminar.

str.replace()

El objetivo de la función str.replace() es eliminar partes de un texto o reemplazarlas con otra subcadena.

original_string = "Hello, Python#"
modified_string = original_string.replace('#', '!')
print(original_string)  # Output: Hello, Python#
print(modified_string)  # Output: Hello, Python!
Python

En el ejemplo anterior, el método replace() reemplaza todos los caracteres de la forma “ #” en la cadena original original_string por un signo de exclamación “!”.

re.sub()

La función re.sub() forma parte del módulo re de Python. Al utilizarla, podrás buscar y reemplazar expresiones regulares en cadenas de caracteres.

import re
original_string = "Hello, World! @#$%^&*"
modified_string = re.sub(r'[@#$%^&*]', '', original_string)
print(original_string)  # Output: Hello, World! @#$%^&*
print(modified_string)  # Output: Hello, World!
Python

En este caso, el patrón [@#$%^&*] es una expresión regular que coincide con los caracteres especiales @, #, $, %, ^, &,*. La función re.sub() busca todas las coincidencias del patrón en la cadena original original_string y las reemplaza por una cadena de caracteres vacía ''. El resultado se guarda en la variable modified_string (cadena modificada) y se imprime.

Eliminar todos los caracteres excepto las letras

Para eliminar todas las letras de una cadena, puedes emplear cualquiera de los métodos isalpha(), filter() y re.sub().

re.sub()

import re
original_string = "Hello, 123 World! @#$%^&*"
modified_string = re.sub(r'[^a-zA-Z]', '', original_string)
print(original_string)  # Output: Hello, 123 World! @#$%^&*
print(modified_string)  # Output: HelloWorld
Python

La expresión regular [^a-zA-Z] coincide con cualquier carácter que no sea una letra minúscula o mayúscula. Como resultado, modified_string solo contiene las letras de la cadena original y también se han eliminado los espacios.

isalpha()

original_string = "Hello, 123 World! @#$%^&*"
modified_string = ''.join(char for char in original_string if char.isalpha())
print(original_string)  # Output: Hello, 123 World! @#$%^&*
print(modified_string)  # Output: HelloWorld
Python

En este código, se emplea la comprensión de lista para iterar sobre cada letra en la cadena original original_string. El método isalpha() comprueba si es un carácter o una letra. Solo las letras se añaden a una nueva cadena de caracteres llamada modified_string y los demás caracteres se ignoran.

filter()

original_string = "Hello, 123 World! @#$%^&*"
filtered_chars = filter(str.isalpha, original_string)
modified_string = ''.join(filtered_chars)
print(original_string)  # Output: Hello, 123 World! @#$%^&*
print(modified_string)  # Output: HelloWorld
Python

El método str.isalpha() devuelve True si el carácter es una letra del abecedario y False en caso contrario. La función filter() crea un objeto de filtro que solo contiene los caracteres para los que se cumple la condición str.isalpha(). De esta forma, se pueden borrar de la cadena original original_string todos los caracteres que no sean letras.

Eliminar todos los caracteres, excepto los números

Al igual que en los ejemplos anteriores, es posible separar números utilizando re.sub(), filter() y una función análoga a isalpha() llamada isdecimal().

re.sub()

import re
original_string = "Hello, 123 World! @#$%^&*"
modified_string = re.sub('[^0-9]', '', original_string)
print(original_string)   # Output: Hello, 123 World! @#$%^&*
print(modified_string)    # Output: 123
Python

Al definir 0-9, se está especificando un rango que incluye todas las cifras del 0 al 9. El guion - entre 0 y 9 actúa como el operador de rango e indica que queremos todos los caracteres dentro de ese rango. El símbolo ^ antepuesto se refiere a todos los caracteres que no se encuentran dentro del rango de 0 a 9. Estos caracteres se reemplazan por caracteres vacíos al utilizar re.sub.

filter()

original_string = "Hello, 123 World! @#$%^&*"
filtered_chars = filter(str.isdecimal, original_string)
modified_string = ''.join(filtered_chars)
print(original_string)   # Output: Hello, 123 World! @#$%^&*
print(modified_string)    # Output: 123
Python

Si se combina la función filter()con isdecimal(), se pueden filtrar números de una cadena y eliminar los demás caracteres. Por tanto, la nueva cadena solo nos muestra los dígitos 123.

isdecimal()

original_string = "Hello, 123 World"
modified_string = ''.join('*' if not char.isdecimal() else char for char in original_string)
print(original_string)   # Output: Hello, 123 World
print(modified_string)    # Output: *******123******
Python

También es posible utilizar el método isdecimal() dentro de una comprensión de lista para iterar sobre cada char en la cadena original_string. Si el carácter no es una cifra decimal (es decir, si not char.isdecimal() se cumple), se reemplazará por un asterisco *. De lo contrario, permanecerá sin modificaciones.

Eliminar caracteres utilizando translate()

El método translate() es una función integrada en Python que se utiliza para realizar reemplazos y traducciones avanzadas de caracteres en cadenas de caracteres. Proporciona una forma eficiente de reemplazar caracteres basados en una tabla de traducciones.

original_string = "Hello, World! Remove vowels."
translation_table = str.maketrans(dict.fromkeys('aeiouAEIOU', '*'))
modified_string = original_string.translate(translation_table)
print(original_string)   # Output: Hello, World! Remove vowels.
print(modified_string)    # Output: H*ll*, W*rld! R*m*v* v*w*ls.
Python

El constructor str.maketrans() y dict.fromkeys() se emplean para crear la tabla de traducción. En ella se especifica que todas las vocales deben sustituirse por *. La tabla se aplica a la cadena original para obtener modified_string.

Consejo

Al filtrar cadenas, también puedes tener en cuenta el Python string index para filtrar caracteres en posiciones específicas. Si quieres obtener cadenas en un formato en concreto, quizá te interese leer nuestro artículo sobre el Python string format.

Hosting
El hosting como nunca lo habías visto
  • Rápido, seguro, flexible y escalable
  • Certificado SSL/DDoS incluido
  • Dominio y asesor personal incluidos
¿Le ha resultado útil este artículo?
Page top