HOWTO · Python

Remova caracteres especiais da string em Python

Este tutorial explica como remover todos os caracteres especiais da string em Python

Nesta página

Para remover caracteres de uma string em Python, primeiro decida quais caracteres manter. Uma compreensão ou filter() com str.isalnum() mantém letras e dígitos Unicode; uma expressão regular pode preservar espaços, enquanto str.translate() pode selecionar um conjunto específico. Os exemplos abaixo usam "Hey! What's up bro?" para deixar cada regra clara. Cada exemplo de código define sua própria entrada e imprime a string transformada, então você pode executar cada abordagem de forma independente.

Defina o que conta como caractere especial

Não existe uma única regra para “caractere especial”. O termo pode significar apenas pontuação, pontuação e espaços em branco, ou qualquer caractere que não seja uma letra ou dígito ASCII. Escolha a regra de acordo com a finalidade da string limpa: um nome de exibição pode manter espaços, enquanto um identificador compacto talvez não.

Strings em Python são Unicode. str.isalnum() reconhece letras e dígitos Unicode, então pode manter caracteres como é e 中. Já um padrão escrito com [a-zA-Z0-9] abrange letras e dígitos ASCII. Por isso, os métodos abaixo produzem resultados diferentes, a menos que você use a mesma regra de caracteres em todos eles.

Remova caracteres não alfanuméricos com uma compreensão

Use uma compreensão de string com str.isalnum() quando o resultado deve conter apenas letras e dígitos. str.join() combina os caracteres mantidos em uma nova string. Essa regra também remove espaços e pontuação.

original = "Hey! What's up bro?"
cleaned = "".join(char for char in original if char.isalnum())
print(cleaned)
HeyWhatsupbro

O predicado mantém letras e dígitos Unicode, assim como caracteres ASCII. Por exemplo, uma letra como é é mantida; espaços, apóstrofos e sinais de pontuação são removidos.

Filtre caracteres com filter()

A função integrada filter() aplica um predicado a cada caractere e retorna um iterador com os caracteres para os quais o predicado é verdadeiro. Passar str.isalnum mantém as mesmas letras e os mesmos dígitos Unicode que a compreensão; str.join() converte o iterador de volta em uma string. Assim como na compreensão, os espaços em branco são removidos.

original = "Hey! What's up bro?"
kept = filter(str.isalnum, original)
cleaned = "".join(kept)
print(cleaned)
HeyWhatsupbro

Use filter() quando quiser reutilizar um predicado ou já tiver um definido. Para essa transformação simples de string, a compreensão expressa a mesma regra de forma mais compacta.

Remova um conjunto definido de caracteres com str.translate()

Use str.translate() quando souber quais caracteres remover e quiser manter todos os demais. str.maketrans() cria uma tabela que associa cada caractere selecionado à remoção. O conjunto abaixo remove sinais de pontuação ASCII comuns; espaços e quaisquer caracteres que não estejam na lista permanecem inalterados.

original = "Hey! What's up bro?"
characters_to_remove = "!@#$%^&*()_-+=<>,./?;:'\"[]{}\\|`~"
table = str.maketrans("", "", characters_to_remove)
cleaned = original.translate(table)
print(cleaned)
Hey Whats up bro

Adicione ou remova caracteres de characters_to_remove conforme a sua entrada. Esse método não remove todos os caracteres que poderiam ser considerados sinais de pontuação: qualquer caractere que não esteja na lista, incluindo pontuação não ASCII, permanece no resultado.

Remova caracteres com uma expressão regular

Use re.sub() para substituir cada caractere correspondente a um padrão. Este padrão mantém apenas letras e dígitos ASCII, portanto remove espaços e sinais de pontuação. A ilustração do recurso mostra essa mesma regra. Os intervalos de letras e dígitos são específicos de ASCII; se o texto incluir letras fora desses intervalos, use uma regra compatível com Unicode.

import re

original = "Hey! What's up bro?"
pattern = r"[^a-zA-Z0-9]"
cleaned = re.sub(pattern, "", original)
print(cleaned)
HeyWhatsupbro

As evidências de execução fornecidas registram que este exemplo produziu a saída mostrada acima. Para preservar espaços em branco, adicione \s ao conjunto permitido, como em r"[^a-zA-Z0-9\s]". As classes de caracteres e flags das expressões regulares do Python permitem definir outras regras, mas confirme se o padrão escolhido corresponde ao idioma e aos caracteres dos seus dados.

Transforme caracteres com map() e uma lambda

map() aplica uma função a cada caractere e retorna um iterador. Uma lambda pode retornar o caractere original quando ele for uma letra ou dígito Unicode ou um espaço em branco, e retornar uma string vazia para os demais caracteres. Juntar esses resultados cria a string limpa; essa regra preserva espaços em branco, incluindo tabulações e quebras de linha.

original = "Hey! What's up bro?"
cleaned = "".join(
    map(lambda char: char if char.isalnum() or char.isspace() else "", original)
)
print(cleaned)
Hey Whats up bro

Esta é uma alternativa que transforma a string caractere por caractere quando a transformação exige uma lógica além de um simples predicado de inclusão. Se a regra apenas mantém letras e dígitos, use o exemplo com compreensão ou filter().

Escolha o método que corresponde às suas regras de caracteres

  • Escolha uma compreensão com str.isalnum() para uma regra direta e legível que mantém letras e dígitos Unicode e remove espaços em branco.
  • Escolha filter() quando quiser passar um predicado reutilizável; no exemplo, ele segue a mesma regra de str.isalnum().
  • Escolha str.translate() para remover um conjunto conhecido de caracteres e preservar todo o restante, incluindo espaços em branco e sinais de pontuação que não estejam na lista.
  • Escolha re.sub() quando um padrão descrever os caracteres a remover ou manter. Os intervalos ASCII mostrados removem espaços em branco; adapte o padrão para texto Unicode ou para preservar espaços em branco.
  • Escolha map() com uma lambda para aplicar uma transformação caractere por caractere. O exemplo mantém letras e dígitos Unicode, além de espaços em branco.

Para nomes ou textos em linguagem natural, decida como tratar acentos, alfabetos não latinos e espaços antes de limpar o texto. Para identificadores ou entradas definidas por um protocolo, siga exatamente o conjunto de caracteres documentado em vez de se basear em uma noção ampla de “caracteres especiais”.