Dominando Expressões Regulares em Python: re.match(), re.search(), re.findall() — Exemplos Práticos
O que é uma Expressão Regular em Python?
Uma expressão regular (regex) é uma descrição textual compacta que diz ao Python como localizar padrões dentro de uma string. Regexes são indispensáveis para extração de dados, validação e transformação em bases de código, logs, arquivos de configuração e projetos de web scraping.
Em Python, o módulo re vem com o interpretador e expõe uma API rica para compilar padrões, buscar e substituir texto. Seja filtrando entrada de usuário, parseando logs ou raspando conteúdo de sites, um sólido domínio dos fundamentos de regex economiza tempo e reduz bugs.
Conceitos Básicos de Regex
- Caracteres literais — correspondem ao texto exato que você escreve.
- Metacaracteres — símbolos especiais que descrevem classes, intervalos ou quantificadores (ex:
\d,\w,+,?,*). - Ancoras —
^e$fixam o padrão ao início ou fim de uma string. - Quantificadores — especificam quantas vezes um token pode repetir.
- Grupos e alternância — capturam sub-correspondências e permitem múltiplas opções.
- Flags — ajustam comportamento do padrão (case-insensitivity, multilinha, etc.).
Tabela de Identificadores Comuns
| Identificador | Descrição | Whitespace | Escape Especial |
|---|---|---|---|
| \d | Qualquer dígito (0-9) | \n | ., +, *, ?, [], $, ^, (, ), {}, |, \ |
| \D | Não-dígito | \s | |
| \s | Espaço, tab, newline, etc. | \t | |
| \S | Não-espaço | \e | |
| \w | Alfanumérico mais underscore | \r | |
| \W | Não-alfanumérico (exceto underscore) | \f | |
| . | Qualquer caractere exceto newline | — | |
| \b | Fronteira de palavra | — | |
| \. | Ponto literal | — | |
| \{x} | Exatamente x ocorrências | — |
Começando com re
import re
O módulo re faz parte da biblioteca padrão do Python e não requer dependências externas. Casos de uso comuns incluem:
- Validação de strings (ex: endereços de email, números de telefone)
- Extração de dados de texto não estruturado
- Web scraping automatizado
Exemplo 1: \w+ e ^
^— ancora no início de uma string.\w+— um ou mais caracteres de palavra (letras, dígitos, underscore).
Usando estes, podemos capturar a primeira palavra de uma string:
import re sample = "guru99, education is fun" result = re.findall(r"^\w+", sample) print(result) # Output: ['guru99']
Removendo o + retornaria apenas o primeiro caractere: ["g"].
Exemplo 2: Dividindo em Whitespace com \s
A função re.split() pode dividir uma string onde um padrão corresponde. Usando \s divide em qualquer caractere de whitespace.
import re text = "we are splitting the words" print(re.split(r"\s", text)) # ['we', 'are', 'splitting', 'the', 'words']
Se a barra invertida for omitida, s é tratado como literal, resultando em divisões em cada caractere s.
Visão Geral dos Métodos de Regex
re.match()— verifica correspondência apenas no início da string.re.search()— varre toda a string e retorna a primeira correspondência.re.findall()— retorna lista de todas as correspondências não sobrepostas.
Usando re.match()
import re text = "guru99 is a great platform" match = re.match(r"^\w+", text) print(match.group() if match else "No match") # Output: guru99
Usando re.search()
import re
text = "Software Testing is fun"
for pattern in ["Software testing", "guru99"]:
found = re.search(pattern, text, re.IGNORECASE)
print(f"Looking for '{pattern}' in '{text}' - {'found a match!' if found else 'no match'}")
Usando re.findall()
import re
emails = "guru99@google.com, careerguru99@hotmail.com, users@yahoomail.com"
found = re.findall(r"[\w\.-]+@[\w\.-]+", emails)
for e in found:
print(e)
Flags de Regex
Flags modificam comportamento do padrão. Flags comuns incluem:
| Flag | Descrição |
|---|---|
| re.M (re.MULTILINE) | Faz ^ e $ corresponderem ao início e fim de cada linha. |
| re.I (re.IGNORECASE) | Ignora distinção de maiúsculas/minúsculas. |
| re.S (re.DOTALL) | Faz ponto corresponder newlines. |
| re.U (re.UNICODE) | Aplica classes de caracteres Unicode-aware. |
| re.L (re.LOCALE) | Faz classes dependerem do locale atual. |
| re.X (re.VERBOSE) | Permite whitespace e comentários no padrão. |
Exemplo Multilinha
import re text = """guru99 careerguru99 selenium""" print(re.findall(r"^\w", text)) # ['g'] print(re.findall(r"^\w", text, re.MULTILINE)) # ['g', 'c', 's']
Compatibilidade com Python 2
Todos os exemplos acima são escritos para Python 3. Se você precisar executá-los sob Python 2, substitua declarações print() pela sintaxe Python 2 e garanta que o módulo re seja importado da mesma forma.
Conclusão
Dominar regex em Python oferece um toolkit poderoso para processamento de texto:
- Use
re.match()para padrões ancorados no início. - Use
re.search()para busca global. - Use
re.findall()para extrair todas as correspondências. - Aplique flags (ex:
re.IGNORECASE,re.MULTILINE) para ajustar comportamento. - Lembre-se de testar padrões com Regex101 ou ferramentas similares antes do deploy.
python
- Dominando o Método strip() do Python: Guia Completo e Exemplos Práticos
- Domine o str.count() do Python: Como Contar Caracteres e Substrings com Exemplos
- Domine Strings format() em Python com Exemplos Claros
- Python len(): Guia Prático para Medir Comprimento de Objetos
- Domine o Método String.find() do Python: Sintaxe, Exemplos e Alternativas
- Função round() em Python Explicada com Exemplos Práticos
- Dominando a Função map() do Python: Sintaxe, Exemplos e Boas Práticas
- Python timeit(): Medindo Tempo de Execução com Exemplos Práticos
- Counter do Python em collections: Contagem Eficiente, Atualização e Operações Aritméticas
- Python list.count(): Guia Especializado com Exemplos Práticos