Compile ou use diretamente
Para padrões reutilizados muitas vezes, re.compile() deixa a intenção clara e evita repetir a expressão. Para um uso isolado, você pode chamar re.search() diretamente.
import re
pattern = re.compile(r'\d{3}')
print(bool(pattern.search('pedido 123')))search, match e fullmatch
search() procura em qualquer posição; match() verifica a partir do início; fullmatch() exige que a string inteira corresponda. Para validação de formatos completos, fullmatch() costuma ser uma escolha segura.
findall para extrair
findall() retorna todas as ocorrências encontradas e é útil para números, códigos, tags e tokens simples.
re.findall(r'\b\d{3}\b', '123 42 999')
# ['123', '999']sub para substituir
re.sub() aplica transformações em texto. Isso serve para normalização, limpeza e mascaramento.
Cuidado com grupos em findall
Quando a expressão contém grupos capturantes, findall() pode retornar apenas os grupos em vez do match inteiro. Se você só precisa agrupar sem capturar, prefira (?:...).
Próximo passo: teste de verdade
Use o Playground para experimentar a expressão e depois pratique no jogo com feedback de falsos positivos e falsos negativos.