Substituir múltiplos caracteres numa string em Python

Rayven Esplanada 10 outubro 2023
  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.

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