# Como remover caracteres de strings em Python

Strings (cadeias de caracteres) em Python são **imutáveis**. Mesmo assim, é possível remover caracteres de strings em Python, com a ajuda de métodos que criam uma nova cadeia de caracteres — esta conterá somente as partes desejadas da string original. Siga com o tutorial “Python: Remove character from string” para aprender como fazer isso.

## Imutabilidade de strings em Python

Se for imutável, um objeto não pode mais ser alterado após a criação dele. Em Python, **todas as cadeias de caracteres são imutáveis** (*immutable*). Assim, para que consiga remover caracteres de uma string em Python, você terá de criar uma nova cadeia de caracteres que inclua apenas os elementos desejados da string original (a string original permanecerá intacta). A imutabilidade das strings em Python contribui para o uso eficiente da memória e ajuda a evitar efeitos inesperados em cadeias de caracteres.

## Remover caracteres específicos de uma string

Se você precisa remover caracteres específicos de uma string em Python, considere usar a função `str.replace()` ou a função `re.sub()` com uma **expressão regular** que represente os caracteres ou o padrão a ser removido.

### `str.replace()`

A função `str.replace()` tem o papel de remover partes de um texto ou de substituí-las por uma substring. Observe:

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

No exemplo de código acima, o método `replace()` substitui todos os caracteres `#` na string original `original_string` por um ponto de exclamação (`!`).

### `re.sub()`

Em Python, a função `re.sub()` faz parte do **módulo re** (*regular expressions*). Com ela, você consegue buscar e substituir expressões regulares em strings, como mostra o exemplo a seguir:

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

Aqui, o padrão `[@#$%^&*]` é uma expressão regular que corresponde aos caracteres especiais `@, #, $, %, ^, &,*`. A função `re.sub()` procura **todas as ocorrências do padrão** na string original `original_string` e as substitui por uma string vazia (`''`). O resultado é armazenado na variável `modified_string` e então exibido.

## Remover todos os caracteres exceto letras

Para remover, de uma string em Python, todos os caracteres que não são letras, você pode usar qualquer um destes métodos: `isalpha()`, `filter()`, `re.sub()` e outros.

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

No exemplo de código acima, a expressão regular `[^a-zA-Z]` coincide com qualquer caractere que não seja uma letra minúscula ou maiúscula. Como resultado, a nova cadeia de caracteres `modified_string` exibe somente as letras da string original. Veja que até os espaços são removidos.

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

Nesse exemplo, utilizamos uma **compreensão de lista** (*list comprehension*) para iterar por cada letra, na string original `original_string`. O método `isalpha()` verifica se um caractere é ou não é uma letra. Apenas as letras são incluídas na nova cadeia de caracteres `modified_string`, sendo todos os outros caracteres ignorados.

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

No exemplo de código acima, `str.isalpha()` é um método que retorna `True` se o caractere for uma letra, e `False` em caso contrário. A função `filter()` cria um **objeto de filtro** contendo somente os caracteres para os quais a condição `str.isalpha()` é verdadeira. Assim, é possível remover todos os caracteres da string original `original_string` que não são letras.

## Remover todos os caracteres exceto números

Como nos exemplos anteriores, também é possível filtrar números em códigos Python. Para fazer isso, você deve inserir as funções `re.sub()`, `filter()` ou `isdecimal()` (essa última é análoga à função `isalpha()`).

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

Com o trecho `0-9` definimos um intervalo. Este contém todos os dígitos de 0 a 9. O hífen (`-`) entre o 0 e o 9 funciona como operador de intervalo, já o `^` antes dos números refere-se a todos os caracteres que não estejam dentro do intervalo especificado (de 0 a 9). Ao ser usada, a função `re.sub` os substitui por caracteres vazios.

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

Se combinar as funções `filter()` e `isdecimal()`, você poderá preservar os números de uma string e remover os demais caracteres, como no exemplo acima. Observe, no código, que a nova string inclui apenas os números `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******
```

Você também pode fazer uso do método `isdecimal()` em uma compreensão de lista para iterar por cada `char` na string original `original_string`. Se o caractere não for um dígito decimal (ou seja, se `not char.isdecimal()` for verdadeiro), ele é substituído por um asterisco (`*`). Em caso contrário, ele permanece inalterado.

## Remover caracteres com `translate()`

O método `translate()` é uma função integrada em Python, que possibilita a tradução e a substituição avançada de caracteres em strings. Ele é uma opção eficiente para substituições de caracteres realizadas com base em tabelas de tradução. O exemplo abaixo demonstra o funcionamento:

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

Aqui, usamos os construtores `str.maketrans()` e `dict.fromkeys()` para criarmos uma **tabela de tradução**. Ela determina que todas as vogais sejam substituídas por `*`. Dessa forma, a tabela é aplicada à string original, para a obtenção da cadeia de caracteres modificada `modified_string`.

Dica Ao filtrar strings, você também pode usar o [Python string index](https://www.ionos.com/digitalguide/websites/web-development/python-string-index/ "Python string index"). Ele é capaz de excluir caracteres em certos locais. Já se você deseja exibir strings em um formato específico, aprenda como fazê-lo com este tutorial do nossos Digital Guide sobre a [formatação de strings em Python](https://www.ionos.com/digitalguide/websites/web-development/python-string-format/ "Python string format").


This is a markdown version of: [https://www.ionos.com/pt-br/digitalguide/sites-de-internet/desenvolvimento-web/python-remove-character-from-string/](https://www.ionos.com/pt-br/digitalguide/sites-de-internet/desenvolvimento-web/python-remove-character-from-string/) for AI/LLM consumption.