Aula 13 – Extração de Dados ⛏️
Buscar padrões é útil, mas extrair informações específicas de uma massa de texto é onde o Regex economiza horas de trabalho manual.
📅 Extraindo Datas
Imagine um log de sistema com milhares de linhas. Como extrair apenas as datas das ocorrências?
- Texto:
O sistema falhou em 21/10/2024 e novamente em 23/10/2024. - Regex:
\d{2}/\d{2}/\d{4} - Resultado:
["21/10/2024", "23/10/2024"]
🏷️ Extraindo Hashtags e Menções
Muito comum em análise de redes sociais.
- Hashtags:
#[a-zA-Z\d_]+ - Menções (@):
@[a-zA-Z\d_]+
🔗 Extraindo Links de HTML
Extrair o atributo src de imagens ou href de links.
- Regex para Links:
href="([^"]+)" - Explicação: Captura tudo o que está dentro das aspas do
href.
📊 Fluxo de Extração
graph TD
Data["Documento Grande (PDF/Log)"] --> Regex["Motor de Busca (findall)"]
Regex --> List["Lista de Resultados"]
List --> Clean["Dados Limpos e Prontos"]
💻 Exemplo em TermynalJS (grep -o)
A flag -o do grep é excelente para extração, pois ela retorna apenas a parte que deu match, e não a linha inteira.
$ # Extraindo apenas as hashtags de um post
$ echo "Aprendendo #Regex com #Python e #JS" | grep -oP "#\w+"
$ #Regex
$ #Python
$ #JS
📝 Exercícios de Fixação
- Básico: Crie um Regex para extrair todos os valores monetários de uma lista:
R$ 10, R$ 50, R$ 100. - Básico: Extraia todas as palavras que possuem exatamente 3 letras de um parágrafo.
- Intermediário: Dado um texto com vários nomes de usuários no formato
@usuario, extraia apenas o nome (sem o @) usando grupos de captura. - Intermediário: Extraia todos os números de telefone de uma página de contatos.
- Desafio: No Regex101, tente extrair o conteúdo de dentro de todos os títulos
<h1>...</h1>de um código HTML simulado.
🚀 Mini-Projeto: Analisador de Logs
Objetivo: Extrair os IPs e os horários de acesso de um log de servidor.
- Texto de Exemplo:
- Regex para IP:
\d{1,3}(\.\d{1,3}){3} - Regex para Hora:
\[(\d{2}:\d{2}:\d{2})\] - Crie um script (JS ou Python) que percorra essas linhas e imprima: "O IP X acessou o sistema às Y horas".