Python Regex sub()

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 reque 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 objeto patternpode ser Pattern.
  • replé a substituição
  • stringé a string de entrada
  • countO parâmetro especifica o número máximo de correspondências que a sub()função deve substituir. Se você passar zero para o countparâmetro ou ignorá-lo completamente, a sub()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-7890em 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:

2124567890Linguagem 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 00por 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:

0Linguagem 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 \1refere-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 Matchargumento 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 sub()função regex do Python para substituir as ocorrências de correspondências de um padrão por uma substituição.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *