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.

AWS Security LIVE!

Join us for AWS Security LIVE!

Discover the future of cloud security. Tune in live for trends, tips, and solutions from AWS and AWS Partners.

Learn More

Top comments (0)

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more

👋 Kindness is contagious

Dive into an ocean of knowledge with this thought-provoking post, revered deeply within the supportive DEV Community. Developers of all levels are welcome to join and enhance our collective intelligence.

Saying a simple "thank you" can brighten someone's day. Share your gratitude in the comments below!

On DEV, sharing ideas eases our path and fortifies our community connections. Found this helpful? Sending a quick thanks to the author can be profoundly valued.

Okay