A manipulação de texto é uma tarefa essencial em muitos projetos de programação, e o Python oferece recursos poderosos para lidar com padrões de texto complexos. Expressões regulares (Regex) e a função de substituição (replace) são ferramentas fundamentais nesse contexto. Neste artigo, vamos explorar de forma detalhada como usar a biblioteca re
do Python para aplicar substituições em padrões de texto usando expressões regulares, além de fornecer exemplos didáticos para facilitar o entendimento.
O que são expressões regulares?
Expressões regulares são sequências de caracteres que definem um padrão de busca. Elas são úteis para encontrar, validar e manipular padrões de texto complexos. No Python, podemos usar o módulo re
para trabalhar com expressões regulares, que fornece várias funções, incluindo search
, match
, findall
e sub
.
A função sub
e a substituição de padrões:
A função sub
é usada para substituir padrões de texto encontrados em uma string por um novo valor. Ela possui a seguinte sintaxe:
re.sub(pattern, replacement, string)
-
pattern
: o padrão de busca (expressão regular) que desejamos encontrar. -
replacement
: o valor pelo qual queremos substituir o padrão. -
string
: a string na qual desejamos realizar a substituição.
Exemplos detalhados e didáticos:
1 - Removendo números de telefone de uma string:
Suponha que temos uma string que contém números de telefone e queremos removê-los completamente. Podemos fazer isso usando a função sub
em conjunto com uma expressão regular simples que identifica números de telefone:
import re
texto = "Entre em contato pelo número (123) 456-7890 ou no celular 98765-4321."
resultado = re.sub(r'\(?\d{3}\)?[-.\s]?\d{3}[-.\s]?\d{4}', '', texto)
print(resultado)
Neste exemplo, a expressão regular \(?\d{3}\)?[-.\s]?\d{3}[-.\s]?\d{4}
busca por padrões que se assemelham a números de telefone, como "(123) 456-7890" e "98765-4321". Ao utilizar a função sub
, substituímos esses padrões por uma string vazia, removendo-os completamente do texto de origem.
2 - Substituindo palavras repetidas:
Vamos supor que temos um texto com palavras duplicadas e queremos corrigir essas duplicações. Podemos utilizar a função sub
em conjunto com uma expressão regular que identifica palavras repetidas:
import re
texto = "Este este é um exemplo exemplo de duplicação de palavras."
resultado = re.sub(r'\b(\w+)\s+\1\b', r'\1', texto)
print(resultado)
Nesse exemplo, a expressão regular \b(\w+)\s+\1\b
busca por palavras duplicadas. Ao utilizar a função sub
, substituímos essas duplicações pela primeira ocorrência da palavra, resultando em um texto sem palavras repetidas.
3 - Removendo espaços em excesso:
Suponha que temos uma string com vários espaços consecutivos e queremos substituí-los por apenas um espaço. Podemos usar a função sub
em conjunto com uma expressão regular que identifica espaços em excesso:
import re
texto = "Este texto possui espaços em excesso."
resultado = re.sub(r'\s+', ' ', texto)
print(resultado)
Nesse exemplo, a expressão regular \s+
identifica uma ou mais ocorrências de espaços em branco. Ao utilizar a função sub
, substituímos esses espaços consecutivos por um único espaço, resultando em um texto com espaços em excesso removidos.
4 - Destrinchando as possibilidades:
\(?
: O caractere\(
corresponde a um parêntese aberto literalmente. O caractere?
indica que o parêntese aberto é opcional. Portanto, essa parte da expressão permite que um texto contenha ou não um parêntese aberto.\d{3}
: A sequência\d
corresponde a qualquer dígito numérico. O quantificador{3}
indica que deve haver exatamente 3 dígitos consecutivos. Portanto, essa parte da expressão busca por um bloco de três dígitos numéricos consecutivos.\)?
: O caractere\)
corresponde a um parêntese fechado literalmente. O caractere?
indica que o parêntese fechado é opcional. Portanto, essa parte da expressão permite que um texto contenha ou não um parêntese fechado.[-.\s]?
: Essa parte da expressão procura por um caractere que pode ser um hífen (-
), um ponto (.
) ou um espaço em branco (\s
). O caractere?
indica que essa sequência é opcional. Portanto, essa parte da expressão permite que um texto contenha ou não um caractere de pontuação ou espaço após o bloco de três dígitos.\d{3}
: Essa parte da expressão busca por um bloco de três dígitos numéricos consecutivos.[-.\s]?
: Essa parte é semelhante à explicação anterior. Ela procura por um caractere opcional de pontuação ou espaço em branco após o segundo bloco de três dígitos.\d{4}
: Essa parte da expressão busca por um bloco de quatro dígitos numéricos consecutivos.
Agora, vamos explorar diversos exemplos de como aplicar essa expressão regular em outras situações:
4.1 - Encontrar e substituir endereços de e-mail:
Suponha que você tenha um texto com várias ocorrências de endereços de e-mail e deseje substituí-los por uma palavra genérica, como "EMAIL". Você pode usar a expressão regular com a função sub
da seguinte maneira:
import re
texto = "Entre em contato pelo e-mail exemplo1@example.com ou no endereço exemplo2@example.com."
resultado = re.sub(r'\b\w+@\w+\.\w+\b', 'EMAIL', texto)
print(resultado)
Saída:
Entre em contato pelo e-mail EMAIL ou no endereço EMAIL.
Nesse exemplo, a expressão regular \b\w+@\w+\.\w+\b
busca por padrões que correspondem a endereços de e-mail. A função sub
substitui todos os endereços de e-mail encontrados por "EMAIL".
4.2 - Padronizar datas em um formato específico:
Suponha que você tenha um texto com datas em diferentes formatos e queira padronizá-las no formato "dd/mm/aaaa". Você pode usar a expressão regular com a função sub
da seguinte maneira:
import re
texto = "As datas podem ser 01/12/2022, 10-02-2023 ou 2024/03/20."
resultado = re.sub(r'(\d{2})[-./](\d{2})[-./](\d{4})', r'\2/\1/\3', texto)
print(resultado)
Saída:
As datas podem ser 12/01/2022, 02/10/2023 ou 20/03/2024.
Nesse exemplo, a expressão regular (\d{2})[-./](\d{2})[-./](\d{4})
busca por padrões que correspondem a datas em diferentes formatos. A função sub
reorganiza os grupos de dígitos encontrados para o formato "dd/mm/aaaa", substituindo as datas originais.
4 - Remover tags HTML de um texto:
Suponha que você tenha um texto com várias tags HTML e queira remover todas elas, deixando apenas o conteúdo textual. Você pode usar a expressão regular com a função sub
da seguinte maneira:
import re
texto = "<h1>Título</h1><p>Parágrafo de exemplo</p><a href='https://exemplo.com'>Link</a>"
resultado = re.sub(r'<.*?>', '', texto)
print(resultado)
Saída:
Título Parágrafo de exemplo Link
Nesse exemplo, a expressão regular <.*?>
busca por padrões que correspondem a tags HTML. A função sub
substitui todas as tags encontradas por uma string vazia, removendo-as do texto.
Esses exemplos ilustram como a expressão regular (?\d{3})?[-.\s]?\d{3}[-.\s]?\d{4} pode ser adaptada e aplicada em diferentes contextos para manipulação de texto de forma eficiente e precisa.
As expressões regulares em conjunto com a função sub
do módulo re
do Python fornecem uma maneira poderosa e flexível de manipular padrões de texto. Neste artigo, exploramos de forma detalhada como usar expressões regulares com a função sub
para substituir padrões de texto. Os exemplos didáticos demonstram o uso prático dessas técnicas, permitindo que você aprimore suas habilidades em manipulação de texto e resolva desafios relacionados a padrões específicos em seus projetos Python.
Top comments (0)