Substituir múltiplos caracteres numa string em Python
-
Utilizar
str.replace()
para Substituir Múltiplos Caracteres em Python -
Utilize
re.sub()
oure.subn()
para Substituir Múltiplos Caracteres em Python -
translate()
emaketrans()
para Substituir Múltiplos Caracteres 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ídostr2
- Cordão de substituições para os caracteres acimastr3
- 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.
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