Las cadenas en Python son in­mu­ta­bles, 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 in­mu­ta­bles?

La in­mu­ta­bi­li­dad implica que una vez que se ha creado un objeto, ya no se puede modificar. En Python, todas las cadenas son in­mu­ta­bles. Al borrar ca­ra­c­te­res de una cadena uti­li­za­n­do métodos de Python, estás creando una nueva cadena que contiene solo de­te­r­mi­na­dos 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 re­su­l­ta­dos ine­s­pe­ra­dos al trabajar con cadenas.

Eliminar de­te­r­mi­na­dos ca­ra­c­te­res de una cadena

Para eliminar de­te­r­mi­na­dos ca­ra­c­te­res de una cadena, puedes utilizar por ejemplo str.replace() o re.sub() con una expresión regular que re­pre­se­n­te los ca­ra­c­te­res 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 re­em­pla­zar­las 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 ca­ra­c­te­res de la forma “ #” en la cadena original original_string por un signo de ex­cla­ma­ción “!”.

re.sub()

La función re.sub() forma parte del módulo re de Python. Al uti­li­zar­la, podrás buscar y re­em­pla­zar ex­pre­sio­nes regulares en cadenas de ca­ra­c­te­res.

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 ca­ra­c­te­res es­pe­cia­les @, #, $, %, ^, &,*. La función re.sub() busca todas las coin­ci­de­n­cias del patrón en la cadena original original_string y las reemplaza por una cadena de ca­ra­c­te­res vacía ''. El resultado se guarda en la variable modified_string (cadena mo­di­fi­ca­da) y se imprime.

Eliminar todos los ca­ra­c­te­res excepto las letras

Para eliminar todas las letras de una cadena, puedes emplear cua­l­quie­ra 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 co­m­pre­n­sió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 ca­ra­c­te­res llamada modified_string y los demás ca­ra­c­te­res 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 abe­ce­da­rio y False en caso contrario. La función filter() crea un objeto de filtro que solo contiene los ca­ra­c­te­res para los que se cumple la condición str.isalpha(). De esta forma, se pueden borrar de la cadena original original_string todos los ca­ra­c­te­res que no sean letras.

Eliminar todos los ca­ra­c­te­res, excepto los números

Al igual que en los ejemplos an­te­rio­res, es posible separar números uti­li­za­n­do 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á es­pe­ci­fi­ca­n­do 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 ca­ra­c­te­res dentro de ese rango. El símbolo ^ an­te­pue­s­to se refiere a todos los ca­ra­c­te­res que no se en­cue­n­tran dentro del rango de 0 a 9. Estos ca­ra­c­te­res se re­em­pla­zan por ca­ra­c­te­res 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 ca­ra­c­te­res. 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 co­m­pre­n­sió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 re­em­pla­za­rá por un asterisco *. De lo contrario, pe­r­ma­ne­ce­rá sin mo­di­fi­ca­cio­nes.

Eliminar ca­ra­c­te­res uti­li­za­n­do translate()

El método translate() es una función integrada en Python que se utiliza para realizar re­em­pla­zos y tra­du­c­cio­nes avanzadas de ca­ra­c­te­res en cadenas de ca­ra­c­te­res. Pro­po­r­cio­na una forma eficiente de re­em­pla­zar ca­ra­c­te­res basados en una tabla de tra­du­c­cio­nes.

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 co­n­s­tru­c­tor str.maketrans() y dict.fromkeys() se emplean para crear la tabla de tra­du­c­ción. En ella se es­pe­ci­fi­ca que todas las vocales deben su­s­ti­tui­r­se 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 ca­ra­c­te­res en po­si­cio­nes es­pe­cí­fi­cas. Si quieres obtener cadenas en un formato en concreto, quizá te interese leer nuestro artículo sobre el Python string format.

Web Hosting
El hosting que crece con tu proyecto
  • Tiempo de actividad de 99.99 % y seguridad ga­ra­n­ti­za­da
  • Aumenta el re­n­di­mie­n­to según el tráfico de tu página web
  • Incluye dominio, SSL, e-mail y soporte 24/7
Ir al menú principal