# 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.

```Python
original_string = "Hello, Python#"
modified_string = original_string.replace('#', '!')
print(original_string)  # Output: Hello, Python#
print(modified_string)  # Output: Hello, 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.

```Python
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!
```

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()`

```Python
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
```

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()`

```Python
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
```

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()`

```Python
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
```

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()`

```Python
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
```

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()`

```Python
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
```

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()`

```Python
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******
```

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.

```Python
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.
```

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](https://www.ionos.es/digitalguide/paginas-web/desarrollo-web/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](https://www.ionos.es/digitalguide/paginas-web/desarrollo-web/python-string-format/).


This is a markdown version of: [https://www.ionos.es/digitalguide/paginas-web/desarrollo-web/python-eliminar-caracteres-de-una-cadena/](https://www.ionos.es/digitalguide/paginas-web/desarrollo-web/python-eliminar-caracteres-de-una-cadena/) for AI/LLM consumption.