Resumo : neste tutorial, você aprenderá sobre a sub()
função regex do Python que retorna uma string após substituir o padrão correspondente em uma string por uma substituição.
Introdução à subfunção regex do Python
A sub()
é uma função no módulo integrado re
que lida com expressões regulares . A sub()
função possui a seguinte sintaxe:
re.sub(pattern, repl, string, count=0, flags=0)
Linguagem de código: Python ( python )
Nesta sintaxe:
pattern
é uma expressão regular que você deseja corresponder. Além de uma expressão regular, o objetopattern
pode serPattern
.repl
é a substituiçãostring
é a string de entradacount
O parâmetro especifica o número máximo de correspondências que asub()
função deve substituir. Se você passar zero para ocount
parâmetro ou ignorá-lo completamente, asub()
função substituirá todas as correspondências.flags
é um ou mais sinalizadores regex que modificam o comportamento padrão do padrão.
A sub()
função procura o padrão na string e substitui as strings correspondentes pela substituição ( repl
).
Se a sub()
função não encontrar uma correspondência, ela retornará a string original. Caso contrário, a sub()
função retorna a string após substituir as correspondências.
Observe que a sub()
função substitui as ocorrências não sobrepostas mais à esquerda do padrão. E você verá isso em detalhes no exemplo a seguir.
Exemplos de subfunções regex Python
Vejamos alguns exemplos de uso da sub()
função regex.
1) Usando a sub()
função regex para retornar o número de telefone simples
O exemplo a seguir usa a sub()
função para transformar o número de telefone (212)-456-7890
em 2124567890
:
import re
phone_no = '(212)-456-7890'
pattern = '\D'
result = re.sub(pattern, '',phone_no)
print(result)
Linguagem de código: Python ( python )
Saída:
2124567890
Linguagem de código: Python ( python )
Neste exemplo, é um conjunto de caracteres\D
de dígitos inversos que corresponde a qualquer caractere único que não seja um dígito. Portanto, a função substitui todos os caracteres que não sejam dígitos pela string vazia .sub()
''
2) Usando a função regex sub()
para substituir as ocorrências não sobrepostas mais à esquerda de um padrão
O exemplo a seguir substitui the 00
por the ''
na string '000000'
:
import re
pattern = '00'
s = '00000'
result = re.sub(pattern,'',s)
print(result)
Linguagem de código: Python ( python )
Saída:
0
Linguagem de código: Python ( python )
Neste exemplo, substituímos dois zeros por strings vazias. Assim, os dois primeiros são correspondidos e substituídos, depois os dois zeros seguintes são correspondidos e substituídos também e, finalmente, o último dígito permanece inalterado.
3) Usando o regex sub()
com um exemplo de referência anterior
O exemplo a seguir usa a sub()
função para substituir o texto cercado por ( *
) (a propósito, é o formato markdown) pela <b>
tag em HTML:
import re
s = 'Make the World a *Better Place*'
pattern = r'\*(.*?)\*'
replacement = r'<b>\1<\\b>'
html = re.sub(pattern, replacement, s)
print(html)
Linguagem de código: Python ( python )
Saída:
import re
s = 'Make the World a *Better Place*'
pattern = r'\*(.*?)\*'
replacement = r'<b>\1<\\b>'
html = re.sub(pattern, replacement, s)
print(html)
Linguagem de código: Python ( python )
Saída:
Make the World a <b>Better Place<\b>
Linguagem de código: Python ( python )
Neste exemplo, o padrão r'\*(.*?)\*'
encontra o texto que começa e termina com o asterisco ( *
). Possui um grupo de captura que captura o texto entre asteriscos ( *
).
A substituição é uma expressão regular com uma referência anterior . A referência anterior \1
refere-se ao primeiro grupo do padrão, que é o texto entre os asteriscos ( *
).
4) Usando a sub()
função regex com a substituição como função
Suponha que você tenha uma lista de strings onde cada elemento contém alfabeto e número:
l = ['A1','A2','A3']
Linguagem de código: Python ( python )
E você deseja elevar ao quadrado o número em cada elemento da lista. Por exemplo, A1 torna-se A1, A2 torna-se A4 e A3 torna-se A9. Para fazer isso, você pode usar a sub()
função.
O segundo argumento da sub()
função ( repl
) pode ser uma função. Nesse caso, a sub()
função chamará esta função para cada ocorrência não sobreposta do padrão.
Esta função ( repl
) recebe um único Match
argumento de objeto e retorna a string de substituição.
O seguinte ilustra como usar o segundo argumento como uma função:
import re
def square(match):
num = int(match.group())
return str(num*num)
l = ['A1','A2','A3']
pattern = r'\d+'
new_l = [re.sub(pattern, square, s) for s in l]
print(new_l)
Linguagem de código: Python ( python )
Saída:
['A1', 'A4', 'A9']
Linguagem de código: Python ( python )
Como funciona.
Primeiro, defina uma lista de strings:
l = ['A1','A2','A3']
Linguagem de código: Python ( python )
Segundo, defina um padrão \d+
que corresponda a um ou mais dígitos:
pattern = r'\d+'
Linguagem de código: Python ( python )
Terceiro, substitua os dígitos pelos seus quadrados chamando a sub()
função e passando a square()
função:
new_l = [re.sub(pattern, square, s) for s in l]
Linguagem de código: Python ( python )
Finalmente, defina a square()
função que eleva ao quadrado o dígito correspondente e o retorna:
def square(match):
num = int(match.group())
return str(num*num)
Linguagem de código: Python ( python )
Resumo
- Use a
função regex do Python para substituir as ocorrências de correspondências de um padrão por uma substituição.sub()