DEV Community

Francisco Júnior
Francisco Júnior

Posted on • Edited on

Aperfeiçoe suas habilidades em manipulação de texto com Expressões Regulares (Regex) e Replace em Python

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)
Enter fullscreen mode Exit fullscreen mode
  • 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)
Enter fullscreen mode Exit fullscreen mode

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)
Enter fullscreen mode Exit fullscreen mode

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)
Enter fullscreen mode Exit fullscreen mode

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)
Enter fullscreen mode Exit fullscreen mode

Saída:

Entre em contato pelo e-mail EMAIL ou no endereço EMAIL.
Enter fullscreen mode Exit fullscreen mode

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)
Enter fullscreen mode Exit fullscreen mode

Saída:

As datas podem ser 12/01/2022, 02/10/2023 ou 20/03/2024.
Enter fullscreen mode Exit fullscreen mode

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)
Enter fullscreen mode Exit fullscreen mode

Saída:

Título Parágrafo de exemplo Link
Enter fullscreen mode Exit fullscreen mode

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)