😁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 a n ocorrências do elemento anterior.

  • {n,}: Corresponde a pelo menos n ocorrências do elemento anterior.

  • {n,m}: Corresponde entre n e m 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