HOWTO · Python

Remover certos caracteres da string em Python

Este tutorial demonstra como remover certos caracteres de uma string em Python

Nesta página

Use str.replace() para remover uma substring conhecida, str.translate() para excluir vários caracteres individuais, uma compreensão para manter os caracteres que atendem a uma condição ou re.sub() quando os caracteres são descritos por um padrão. Cada abordagem retorna uma nova string: strings Python são imutáveis, portanto o valor original continua disponível. Os quatro exemplos abaixo foram executados com sucesso, e cada um exibiu Hello World.

Remover caracteres específicos com str.replace()

str.replace(old, new) substitui as ocorrências de uma substring por outra. Use "" como substituição para removê-la. Essa opção é clara quando os alvos são conhecidos e poucos; chamadas repetidas podem lidar com um pequeno conjunto.

Este exemplo remove duas substrings conhecidas de uma saudação:

O código e os rótulos ou saídas exibidos nesta seção permanecem em inglês.

source = "Hello, World!"
cleaned = source.replace(",", "").replace("!", "")
print(cleaned)

As chamadas removem vírgulas e pontos de exclamação onde quer que apareçam. Elas não alteram source; atribua o valor retornado a uma variável se o código posterior precisar usar o texto limpo. replace() também remove substrings conhecidas mais longas, então use-o quando o alvo for uma palavra ou sequência, e não apenas um caractere. Para uma lista maior de caracteres individuais, uma tabela de tradução ou um filtro é mais fácil de manter.

Remover vários caracteres com str.translate()

Use str.maketrans() com seu terceiro argumento para criar uma tabela de exclusão para um conjunto de caracteres individuais. Em seguida, passe a tabela para str.translate(). Cada caractere listado para exclusão é removido onde quer que apareça; isso não corresponde a substrings arbitrárias com vários caracteres.

O código e os rótulos ou saídas exibidos nesta seção permanecem em inglês.

source = "Hello, World!"
remove_chars = ",!"
table = str.maketrans("", "", remove_chars)
cleaned = source.translate(table)
print(cleaned)

Altere remove_chars para controlar quais caracteres serão removidos. Essa opção é adequada quando a regra define um conjunto fixo de caracteres. str.maketrans() também pode especificar substituições de caracteres, mas o terceiro argumento indica especificamente quais devem ser excluídos. Para uma regra baseada em uma condição, use filtragem.

Filtrar caracteres e juntar o resultado

Uma compreensão deixa clara a regra de inclusão: percorra a entrada e mantenha um caractere somente quando ele não estiver no conjunto de remoção. Em seguida, chame str.join() na string separadora para combinar os caracteres mantidos. O separador vazio mostrado aqui os concatena sem acrescentar texto.

O código e os rótulos ou saídas exibidos nesta seção permanecem em inglês.

source = "Hello, World!"
remove_chars = set(",!")
cleaned = "".join(char for char in source if char not in remove_chars)
print(cleaned)

Use uma condição que expresse o que deve permanecer, como manter apenas os dígitos com char.isdigit(). A condição é avaliada para cada caractere e, por isso, pode representar regras mais flexíveis do que uma tabela de exclusão fixa. O separador controla o resultado: " ".join(...) insere espaços entre os itens mantidos, enquanto "".join(...) os coloca lado a lado. join() combina um iterável; não realiza a filtragem.

Remover caracteres que correspondem a um padrão com re.sub()

re.sub(pattern, replacement, text) substitui todas as correspondências de um padrão de expressão regular. Uma classe de caracteres lista alternativas para corresponder a um caractere por vez, e uma substituição vazia exclui cada correspondência. Use uma string bruta para os padrões quando isso ajudar a deixar as barras invertidas mais legíveis.

O código e os rótulos ou saídas exibidos nesta seção permanecem em inglês.

import re

source = "Hello, World!"
cleaned = re.sub(r"[,!]", "", source)
print(cleaned)

A classe [,!] corresponde a uma vírgula ou a um ponto de exclamação. Para remover um intervalo ou uma categoria de caracteres, expresse essa regra no padrão; leia e teste esses padrões com atenção, pois a pontuação pode ter significado especial em expressões regulares. Escape um caractere quando ele precisar ser correspondido literalmente, mas tiver uma função especial na expressão regular. Para um conjunto fixo pequeno, str.translate() costuma ser mais fácil de ler; escolha re.sub() quando a correspondência por padrão for necessária.

Escolher uma abordagem e entender seus limites

Escolha com base em como o texto indesejado é especificado:

  • Use str.replace() para uma substring conhecida ou algumas substituições explícitas.
  • Use str.translate() para excluir um conjunto fixo de caracteres individuais.
  • Use uma compreensão e str.join() quando a regra for uma condição aplicada a cada caractere.
  • Use re.sub() quando um padrão de expressão regular descrever o que remover.

Essas operações removem exatamente o que seus argumentos selecionam. Elas não removem automaticamente espaços em branco ao redor, normalizam Unicode nem tratam letras maiúsculas e minúsculas como equivalentes. Se a remoção precisar ignorar diferenças entre maiúsculas e minúsculas, defina quais variações devem corresponder ou aplique uma regra de correspondência que não diferencie maiúsculas de minúsculas; considere também que converter o texto de origem para minúsculas ou maiúsculas altera o próprio texto. Evite convertê-lo apenas para remover caracteres, a menos que essa alteração seja desejada. Os exemplos ilustram a estrutura de cada método; não é necessário fazer afirmações sobre velocidade relativa para escolher entre eles. Prefira a regra mais clara para os dados que estão sendo limpos e, se o desempenho for importante, meça com uma entrada representativa.