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 imu­ta­bi­li­dade implica que, uma vez criado um objeto, ele não pode mais ser mo­di­fi­cado. Em Python, todas as cadeias são imutáveis. Ao apagar ca­rac­te­res de uma cadeia usando métodos Python, você está a criar uma nova cadeia que contém apenas de­ter­mi­na­dos elementos da original. A cadeia original permanece intacta. Essa pro­pri­e­dade das cadeias permite gerenciar efi­ci­en­te­mente a memória em Python e ajuda a evitar re­sul­ta­dos ines­pe­ra­dos ao trabalhar com cadeias.

Remover de­ter­mi­na­dos ca­rac­te­res de uma cadeia

Para eliminar de­ter­mi­na­dos ca­rac­te­res de uma cadeia, pode utilizar, por exemplo, str.replace() ou re.sub() com uma expressão regular que re­pre­sente os ca­rac­te­res 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!
Python

No exemplo anterior, o método replace() substitui todos os ca­rac­te­res da forma “ #” na cadeia original original_string por um ponto de ex­cla­ma­ção “!”.

re.sub()

A função re.sub() faz parte do módulo re do Python. Ao utilizá-la, poderá procurar e subs­ti­tuir ex­pres­sões regulares em cadeias de ca­rac­te­res.

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

Neste caso, o padrão [@#$%^&*] é uma expressão regular que cor­res­ponde aos ca­rac­te­res especiais @, #, $, %, ^, &,*. A função re.sub() procura todas as cor­res­pon­dên­cias do padrão na cadeia original original_string e substitui-as por uma cadeia de ca­rac­te­res vazia ''. O resultado é guardado na variável modified_string (cadeia mo­di­fi­cada) e impresso.

Remover todos os ca­rac­te­res, 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: HelloWorld
Python

A expressão regular [^a-zA-Z] cor­res­ponde 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: HelloWorld
Python

Neste código, utiliza-se a com­pre­en­sã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 adi­ci­o­na­das a uma nova cadeia de ca­rac­te­res chamada modified_string e os outros ca­rac­te­res 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: HelloWorld
Python

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 ca­rac­te­res para os quais a condição str.isalpha() é sa­tis­feita. Desta forma, todos os ca­rac­te­res que não sejam letras podem ser apagados da cadeia original original_string.

Remover todos os ca­rac­te­res, exceto os números

Tal como nos exemplos an­te­ri­o­res, é possível separar números uti­li­zando 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: 123
Python

Ao definir 0-9, está-se es­pe­ci­fi­cando 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 ca­rac­te­res dentro desse intervalo. O símbolo ^ prefixado refere-se a todos os ca­rac­te­res que não estão dentro do intervalo de 0 a 9. Esses ca­rac­te­res são subs­ti­tuí­dos por ca­rac­te­res 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: 123
Python

Se com­bi­nar­mos a função filter() isdecimal(), podemos filtrar os números de uma cadeia e eliminar os outros ca­rac­te­res. 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******
Python

Também é possível utilizar o método isdecimal() dentro de uma com­pre­en­sã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á subs­ti­tuído por um asterisco *. Caso contrário, per­ma­ne­cerá inal­te­rado.

Eliminar ca­rac­te­res uti­li­zando translate()

O método translate() é uma função integrada no Python que é utilizada para realizar subs­ti­tui­ções e traduções avançadas de ca­rac­te­res em cadeias de ca­rac­te­res. Ele fornece uma forma eficiente de subs­ti­tuir ca­rac­te­res 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.
Python

Os cons­tru­to­res str.maketrans() e dict.fromkeys() são uti­li­za­dos para criar a tabela de tradução. Nela, es­pe­ci­fica-se que todas as vogais devem ser subs­ti­tuí­das por *. A tabela é aplicada à cadeia original para obter modified_string.

Ir para o menu principal