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.
original_string = "Hello, Python#"
modified_string = original_string.replace('#', '!')
print(original_string) # Output: Hello, Python#
print(modified_string) # Output: Hello, Python!PythonNo 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.
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!PythonNeste 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()
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: HelloWorldPythonA 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()
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: HelloWorldPythonNeste 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()
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: HelloWorldPythonO 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()
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: 123PythonAo 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()
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: 123PythonSe 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()
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******PythonTambé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.
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.PythonOs 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.