😁Expressões Regulares (Regex)

As expressões regulares, ou regex, são uma ferramenta poderosa para buscar, substituir e manipular texto em strings. Elas permitem a identificação de padrões complexos e são amplamente utilizadas em diversas aplicações, como validação de dados, busca em textos, extração de informações e muito mais. Neste capítulo, vamos explorar o conceito de expressões regulares, sua sintaxe e como utilizá-las no Python com a biblioteca re
.
1. Introdução às Expressões Regulares
Uma expressão regular é uma sequência de caracteres que forma um padrão de busca. Esse padrão pode ser usado para identificar sequências específicas dentro de strings. Através do uso de expressões regulares, você pode realizar operações como:
Verificar se uma string corresponde a um determinado padrão.
Encontrar ocorrências de um padrão em uma string.
Substituir partes de uma string que correspondem a um padrão.
Dividir uma string com base em um padrão.
2. Sintaxe Básica de Regex
Aqui estão alguns dos elementos básicos da sintaxe de expressões regulares:
.`: Corresponde a qualquer caractere, exceto uma nova linha.
^
: Indica o início da string.$
: Indica o final da string.*
: Corresponde a zero ou mais ocorrências do elemento anterior.+
: Corresponde a uma ou mais ocorrências do elemento anterior.?
: Corresponde a zero ou uma ocorrência do elemento anterior.{n}
: Corresponde exatamente an
ocorrências do elemento anterior.{n,}
: Corresponde a pelo menosn
ocorrências do elemento anterior.{n,m}
: Corresponde entren
em
ocorrências do elemento anterior.[...]
: Corresponde a qualquer caractere dentro dos colchetes.|
: Operador "ou", que permite alternativas (ex:abc|def
).\
: Escapa caracteres especiais.
3. Usando a Biblioteca re
No Python, a biblioteca re
fornece suporte para trabalhar com expressões regulares. Vamos explorar algumas das funções mais comuns dessa biblioteca.
3.1. Importando a Biblioteca
Para utilizar expressões regulares no Python, primeiro você deve importar a biblioteca re
:
import re
3.2. Funções Comuns da Biblioteca re
re.match()
: Verifica se o padrão corresponde ao início da string.re.search()
: Busca o padrão em toda a string e retorna a primeira correspondência.re.findall()
: Retorna todas as correspondências de um padrão em uma lista.re.finditer()
: Retorna um iterador com todas as correspondências de um padrão.re.sub()
: Substitui as ocorrências de um padrão por uma nova string.re.split()
: Divide uma string com base em um padrão.
3.3. Exemplos de Uso
Exemplo de re.match()
:
import re
padrao = r"olá"
texto = "olá, mundo!"
resultado = re.match(padrao, texto)
if resultado:
print("Match encontrado:", resultado.group())
else:
print("Nenhum match encontrado.")
Saída:
Match encontrado: olá
Exemplo de re.search()
:
import re
padrao = r"mundo"
texto = "Olá, mundo!"
resultado = re.search(padrao, texto)
if resultado:
print("Search encontrado:", resultado.group())
else:
print("Nenhum search encontrado.")
Saída:
Search encontrado: mundo
Exemplo de re.findall()
:
import re
padrao = r"\d+" # Encontra sequências de dígitos
texto = "Hoje é dia 19 e amanhã será dia 20."
resultados = re.findall(padrao, texto)
print("Números encontrados:", resultados)
Saída:
Números encontrados: ['19', '20']
Exemplo de re.sub()
:
import re
padrao = r"dia"
texto = "Hoje é dia 19 e amanhã será dia 20."
resultado = re.sub(padrao, "data", texto)
print("Texto modificado:", resultado)
Saída:
Texto modificado: Hoje é data 19 e amanhã será data 20.
4. Grupos e Captura
As expressões regulares também permitem a captura de grupos de caracteres, que podem ser referenciados posteriormente. Isso é feito utilizando parênteses (...)
.
Exemplo de Grupos:
import re
padrao = r"(\w+) (\w+)" # Captura duas palavras
texto = "Python Regex"
resultado = re.search(padrao, texto)
if resultado:
print("Grupo 1:", resultado.group(1)) # Primeira palavra
print("Grupo 2:", resultado.group(2)) # Segunda palavra
Saída:
Grupo 1: Python
Grupo 2: Regex
5. Aninhamento e Retrovisores
Você também pode usar grupos aninhados e retrovisores (backreferences) em expressões regulares.
Exemplo de Retrovisor:
import re
padrao = r"(\b\w+)\s+\1" # Captura uma palavra que se repete
texto = "hello hello world"
resultado = re.search(padrao, texto)
if resultado:
print("Palavra repetida encontrada:", resultado.group())
else:
print("Nenhuma palavra repetida encontrada.")
Saída:
Palavra repetida encontrada: hello hello
6. Casos de Uso Comuns
As expressões regulares são usadas em diversos cenários, incluindo:
Validação de Formulários: Verificar se os dados de entrada estão no formato correto (ex: e-mails, números de telefone).
Extração de Dados: Extrair informações específicas de textos, como URLs, datas ou códigos postais.
Substituições: Realizar substituições em strings com base em padrões.
Análise de Log: Filtrar e buscar informações em arquivos de log.
7. Dicas e Considerações
Testar suas expressões: Use ferramentas online como Regex101 ou RegExr para testar e entender suas expressões regulares.
Cuidado com a complexidade: Expressões regulares complexas podem se tornar difíceis de ler e manter. Sempre que possível, busque simplificá-las.
Performance: Para textos muito grandes ou padrões complexos, a performance pode ser uma preocupação. Teste seu código em diferentes cenários.
Conclusão
Neste capítulo, abordamos as expressões regulares em Python, aprendendo sobre sua sintaxe, uso e funções na biblioteca re
. As expressões regulares são uma habilidade valiosa para qualquer programador, pois permitem manipular e analisar strings de forma eficiente. Com o conhecimento adquirido, você poderá aplicar expressões regulares em seus projetos, aumentando a flexibilidade e a eficiência do seu código.
Atualizado