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!
PythonEn 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!
PythonEn 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
PythonLa 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
PythonEn 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
PythonEl 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
PythonAl 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
PythonSi 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******
PythonTambié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.
PythonEl 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
.
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.
- Rápido, seguro, flexible y escalable
- Seguro con SSL y protección DDoS
- Dominio y asesor personal incluidos