Substituir múltiplos caracteres numa string em Python

  1. Utilizar str.replace() para Substituir Múltiplos Caracteres em Python
  2. Utilize re.sub() ou re.subn() para Substituir Múltiplos Caracteres em Python
  3. translate() e maketrans() para Substituir Múltiplos Caracteres em Python
Substituir múltiplos caracteres numa string em Python

Este tutorial mostra-lhe como substituir múltiplos caracteres numa string em Python.

Digamos que queremos remover caracteres especiais numa string e substituí-los por espaços em branco.

  • A lista de caracteres especiais a serem removidos seria !#$%^&*().
  • Além disso, queremos substituir as vírgulas , por espaço em branco.
  • A amostra de texto que iremos manipular:
A!!!,Quick,brown#$,fox,ju%m%^ped,ov&er&),th(e*,lazy,d#!og$$$

Utilizar str.replace() para Substituir Múltiplos Caracteres em Python

Podemos utilizar o método replace() do tipo de dados str para substituir os substratos numa saída diferente.

O método replace() aceita dois parâmetros, o primeiro parâmetro é o padrão regex com o qual se pretende fazer corresponder as strings, e o segundo parâmetro é a string de substituição para as strings correspondentes.

É também um terceiro parâmetro opcional em replace() que aceita um número inteiro para definir o máximo count de substituições a executar. Se se colocar 2 como parâmetro count, a função replace() só corresponderá e substituirá 2 instâncias dentro da string.

A função str.replace('Hello', 'Hi') substituirá todas as instâncias de Hello numa string por Hi. Se tiver uma string Hello World e executar a função de substituição na mesma, esta tornar-se-á Hi World após execução.

Vamos utilizar replace no texto de amostra que declarámos acima. Primeiro removendo os caracteres especiais, fazendo um loop em cada caracter e substituindo-os por uma string vazia, depois convertendo as vírgulas em espaço em branco.

txt = "A!!!,Quick,brown#$,fox,ju%m%^ped,ov&er&),th(e*,lazy,d#!og$$$"


def processString(txt):
    specialChars = "!#$%^&*()"
    for specialChar in specialChars:
        txt = txt.replace(specialChar, "")
    print(txt)  # A,Quick,brown,fox,jumped,over,the,lazy,dog
    txt = txt.replace(",", " ")
    print(txt)  # A Quick brown fox jumped over the lazy dog

Isto significa que qualquer coisa dentro do colchete de spChars será substituído por uma string vazia utilizando txt.replace(spChars, '').

O resultado da primeira função replace() da string seria, então, replace():

A, Quick, brown, fox, jumped, over, the, lazy, dog

A próxima chamada replace() substituirá todas as instâncias de vírgula , num único espaço em branco:

A Quick brown fox jumped over the lazy dog

Utilize re.sub() ou re.subn() para Substituir Múltiplos Caracteres em Python

Em Python, pode importar o módulo re, que tem uma quantidade de operações de correspondência de expressão para regex a utilizar.

Duas dessas funções dentro do re são sub() e subn().

Vamos declarar outro exemplo de string para estes métodos. Digamos que queremos substituir todos os números dentro de uma string por X:

txt = "Hi, my phone number is 089992654231. I am 34 years old. I live in 221B Baker Street. I have 1,000,000 in my bank account."

re.sub() para Substituir Múltiplos Caracteres em Python

A função tem 3 argumentos principais. O primeiro argumento aceita um padrão regex, o segundo argumento é uma string para substituir os padrões combinados, e o terceiro é a string com que se deve operar.

Criar uma função converte todos os números dentro de uma string em X.

import re

txt = "Hi, my phone number is 089992654231. I am 34 years old. I live in 221B Baker Street. I have 1,000,000 in my bank account."


def processString3(txt):
    txt = re.sub("[0-9]", "X", txt)
    print(txt)


processString3(txt)

Resultado:

Hi, my phone number is XXXXXXXXXXXX. I am XX years old. I live in XXXB Baker Street. I have X,XXX,XXX in my bank account.

re.subn() para Substituir Múltiplos Caracteres em Python

Esta função é essencialmente a mesma que re.sub() mas em vez disso devolve um tuple da string convertida e o número de substituições efectuadas.

import re

txt = "Hi, my phone number is 089992654231. I am 34 years old. I live in 221B Baker Street. I have 1,000,000 in my bank account."


def processString4(txt):
    txt, n = re.subn("[0-9]", "X", txt)
    print(txt)


processString4(txt)

Resultado:

Hi, my phone number is XXXXXXXXXXXX. I am XX years old. I live in XXXB Baker Street. I have X,XXX,XXX in my bank account.'
txt, n = re.subn("[0-9]", "X", txt)

No trecho de código acima, a string processada é atribuída a txt e o contador de substituições é atribuído a n.

re.subn() é útil se se quiser anotar quantos grupos de padrões manipulados como métrica ou para processamento posterior.

translate() e maketrans() para Substituir Múltiplos Caracteres em Python

O translate() e maketrans() utilizam uma abordagem diferente do regex, faz uso de dicionários para mapear valores antigos para novos valores.

O maketrans() aceita 3 parâmetros ou um único dicionário de mapeamentos:

  • str1 - Cordão de caracteres a ser substituído
  • str2 - Cordão de substituições para os caracteres acima
  • str3 - Cordão de caracteres a eliminar

maketrans() uma tabela de mapeamento entre a string original e a sua substituição.

translate() aceita o que quer que seja maketrans() devolve e depois gera a string traduzida.

Digamos que queremos converter todas as vogais em minúsculas dentro de uma string em maiúsculas e apagar cada x, y, e z encontrados na string.

txt = "Hi, my name is Mary. I like zebras and xylophones."


def processString5(txt):
    transTable = txt.maketrans("aeiou", "AEIOU", "xyz")
    txt = txt.translate(transTable)
    print(txt)


processString5(txt)

Resultado:

HI, m nAmE Is MAr. I lIkE EbrAs And lOphOnEs.

translate() converteu todas as vogais em minúsculas em versões em maiúsculas e removeu todas as instâncias de x, y, e z.

Uma outra abordagem para utilizar estes métodos é utilizar um único dicionário de mapeamentos em vez de 3 argumentos.

def processString6(txt):
    dictionary = {
        "a": "A",
        "e": "E",
        "i": "I",
        "o": "O",
        "u": "U",
        "x": None,
        "y": None,
        "z": None,
    }
    transTable = txt.maketrans(dictionary)
    txt = txt.translate(transTable)
    print(txt)

Isto ainda produzirá a mesma saída que processString5, mas é implementado com dicionários. Pode utilizar o que for mais conveniente para si.

Em resumo, existem múltiplas formas de substituir múltiplos caracteres numa string, utilizando funções incorporadas ou funções de bibliotecas importadas em Python.

O método mais comum é a utilização de replace(). re.sub() e subn() também são bastante fáceis de utilizar e aprender. O translate() utiliza uma abordagem diferente, uma vez que não depende de expressões regulares para executar a manipulação de strings, em vez disso, depende de dicionários e mapas.

Se o desejar, pode até fazer loop manualmente sobre a string utilizando para loops e adicionar as suas próprias condições para substituir e utilizar apenas substring() ou split(), mas seria muito ineficiente e redundante. Python oferece funções existentes para fazer o trabalho por si, o que é muito mais fácil do que fazer você mesmo o trabalho sujo.

Está gostando dos nossos tutoriais? Inscreva-se no DelftStack no YouTube para nos apoiar na criação de mais vídeos tutoriais de alta qualidade. Inscrever-se
Rayven Esplanada avatar Rayven Esplanada avatar

Skilled in Python, Java, Spring Boot, AngularJS, and Agile Methodologies. Strong engineering professional with a passion for development and always seeking opportunities for personal and career growth. A Technical Writer writing about comprehensive how-to articles, environment set-ups, and technical walkthroughs. Specializes in writing Python, Java, Spring, and SQL articles.

LinkedIn

Artigo relacionado - Python String