# Remover caracteres de uma cadeia de caracteres em Python ou substituí-los

As cadeias em Python são **imutáveis**, mas é possível utilizar métodos para criar uma nova cadeia que contenha apenas as partes desejadas da original.

## O que significa que as cadeias são imutáveis?

A imutabilidade implica que, uma vez criado um objeto, ele não pode mais ser modificado. Em Python, **todas as cadeias são imutáveis**. Ao apagar caracteres de uma cadeia usando métodos Python, você está a criar uma nova cadeia que contém apenas determinados elementos da original. A cadeia original permanece intacta. Essa propriedade das cadeias permite gerenciar eficientemente a memória em Python e ajuda a evitar resultados inesperados ao trabalhar com cadeias.

## Remover determinados caracteres de uma cadeia

Para eliminar determinados caracteres de uma cadeia, pode utilizar, por exemplo, `str.replace()` ou `re.sub()` com uma **expressão regular** que represente os caracteres ou o padrão a ser eliminado.

### `str.replace()`

O objetivo da função `str.replace()` é eliminar partes de um texto ou substituí-las por outra subcadeia.

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

No exemplo anterior, o método `replace()` substitui todos os caracteres da forma “ #” na cadeia original `original_string` por um ponto de exclamação “!”.

### `re.sub()`

A função `re.sub()` faz parte do **módulo re** do Python. Ao utilizá-la, poderá procurar e substituir expressões regulares em cadeias 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!
```

Neste caso, o padrão `[@#$%^&*]` é uma expressão regular que corresponde aos caracteres especiais `@, #, $, %, ^, &,*`. A função `re.sub()` procura **todas as correspondências do padrão** na cadeia original `original_string` e substitui-as por uma cadeia de caracteres vazia `''`. O resultado é guardado na variável `modified_string` (cadeia modificada) e impresso.

## Remover todos os caracteres, exceto as letras

Para eliminar todas as letras de uma cadeia, pode utilizar qualquer um dos métodos `isalpha()`, `filter()` e `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
```

A expressão regular `[^a-zA-Z]` corresponde a qualquer caractere que não seja uma letra minúscula ou maiúscula. Como resultado, `modified_string` contém apenas as letras da cadeia original e os espaços também foram 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
```

Neste código, utiliza-se a **compreensão de lista** para iterar sobre cada letra na cadeia original `original_string`. O método `isalpha()` verifica se é um caractere ou uma letra. Apenas as letras são adicionadas a uma nova cadeia de caracteres chamada `modified_string` e os outros caracteres são 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
```

O método `str.isalpha()` retorna `True` se o caractere for uma letra do alfabeto e `False` caso contrário. A função `filter()` cria um **objeto de filtro** que contém apenas os caracteres para os quais a condição `str.isalpha()` é satisfeita. Desta forma, todos os caracteres que não sejam letras podem ser apagados da cadeia original `original_string`.

## Remover todos os caracteres, exceto os números

Tal como nos exemplos anteriores, é possível separar números utilizando `re.sub()`, `filter()` e uma função análoga a `isalpha()` chamada `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
```

Ao definir `0-9`, está-se especificando um intervalo que inclui todos os números de 0 a 9. O hífen `-` entre 0 e 9 atua como o operador de intervalo e indica que queremos todos os caracteres dentro desse intervalo. O símbolo ^ prefixado refere-se a todos os caracteres que não estão dentro do intervalo de 0 a 9. Esses caracteres são substituídos por caracteres vazios ao usar `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
```

Se combinarmos a função `filter()` `isdecimal()`, podemos filtrar os números de uma cadeia e eliminar os outros caracteres. Assim, a nova cadeia mostra-nos apenas os 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******
```

Também é possível utilizar o método `isdecimal()` dentro de uma compreensão de lista para iterar sobre cada `char` na cadeia `original_string`. Se o caractere não for um dígito decimal (ou seja, se `not char.isdecimal()` for cumprido), ele será substituído por um asterisco `*`. Caso contrário, permanecerá inalterado.

## Eliminar caracteres utilizando `translate()`

O método `translate()` é uma função integrada no Python que é utilizada para realizar substituições e traduções avançadas de caracteres em cadeias de caracteres. Ele fornece uma forma eficiente de substituir caracteres com base numa tabela de traduções.

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

Os construtores `str.maketrans()` e `dict.fromkeys()` são utilizados para criar a **tabela de tradução**. Nela, especifica-se que todas as vogais devem ser substituídas por `*`. A tabela é aplicada à cadeia original para obter `modified_string`.

Dica Ao filtrar cadeias, também pode ter em conta o índice de cadeias Python para filtrar caracteres em posições específicas. Se quiser obter cadeias num formato específico, talvez seja interessante ler o nosso artigo sobre o formato de cadeias Python.


This is a markdown version of: [https://www.ionos.com/pt-pt/digitalguide/paginas-web/desenvolvimento-web/python-eliminar-caracteres-de-uma-string/](https://www.ionos.com/pt-pt/digitalguide/paginas-web/desenvolvimento-web/python-eliminar-caracteres-de-uma-string/) for AI/LLM consumption.