Dominando Expressões Regulares em Python
Expressões regulares (regex ou regexp) são ferramentas poderosas para casamento de padrões em strings. O módulo re
do Python fornece uma interface abrangente para trabalhar com elas, permitindo manipulação sofisticada de texto e extração de dados. Este tutorial o guiará pelas funções e conceitos essenciais, capacitando-o a utilizar efetivamente o poder das expressões regulares em seus projetos Python.
Sumário
re.match()
: Casamento no Iníciore.search()
: Encontrando a Primeira Correspondênciare.compile()
: Otimizando o Desempenho- Flags: Modificando o Comportamento de Correspondência
- Conjuntos de Caracteres: Definindo Caracteres Permitidos
- Busca e Substituição com
re.sub()
re.findall()
: Extraindo Todas as Correspondênciasre.finditer()
: Iterando pelas Correspondênciasre.split()
: Separando Strings por Padrão- Padrões Básicos: Âncoras, Classes de Caracteres
- Repetição: Quantificadores e Correspondência Gulosa vs. Não Gulosa
- Sequências Especiais: Dígitos, Espaços em Branco, Caracteres de Palavra
re.escape()
: Lidando com Caracteres Especiais- Grupos de Captura e o Método
group()
1. re.match()
: Casamento no Início
A função re.match()
tenta casar o padrão apenas no início da string. Retorna um objeto de correspondência se bem-sucedido, caso contrário None
.
import re
text = "Hello World"
pattern = "Hello"
match = re.match(pattern, text)
if match:
print("Correspondência encontrada:", match.group(0))
else:
print("Nenhuma correspondência encontrada")
2. re.search()
: Encontrando a Primeira Correspondência
re.search()
verifica toda a string em busca da primeira ocorrência do padrão. Diferentemente de re.match()
, não exige que a correspondência esteja no início.
import re
text = "Hello World"
pattern = "World"
match = re.search(pattern, text)
if match:
print("Correspondência encontrada:", match.group(0))
else:
print("Nenhuma correspondência encontrada")
3. re.compile()
: Otimizando o Desempenho
Para melhor desempenho, especialmente com uso repetido do mesmo padrão, compile-o usando re.compile()
. Isso cria um objeto de padrão reutilizável.
import re
compiled_pattern = re.compile(r"d+") # Compila o padrão
text1 = "There are 123 apples"
text2 = "And 456 oranges"
match1 = compiled_pattern.search(text1)
match2 = compiled_pattern.search(text2)
print(match1.group(0)) # Saída: 123
print(match2.group(0)) # Saída: 456
4. Flags: Modificando o Comportamento de Correspondência
Flags modificam o processo de correspondência. re.IGNORECASE
realiza correspondência sem diferenciação de maiúsculas e minúsculas, e re.MULTILINE
trata cada linha como uma string separada para âncoras ^
e $
.
import re
text = "Hello world"
pattern = re.compile("hello", re.IGNORECASE)
match = pattern.search(text)
print(match.group(0)) # Saída: Hello
5. Conjuntos de Caracteres: Definindo Caracteres Permitidos
Conjuntos de caracteres ([]
) especificam caracteres permitidos. Por exemplo, [a-z]
corresponde a letras minúsculas.
import re
text = "abc123XYZ"
pattern = re.compile("[a-z]+")
match = pattern.search(text)
print(match.group(0)) # Saída: abc
6. Busca e Substituição com re.sub()
re.sub()
substitui ocorrências de um padrão por uma string de substituição.
import re
text = "Hello World"
new_text = re.sub("World", "Python", text)
print(new_text) # Saída: Hello Python
7. re.findall()
: Extraindo Todas as Correspondências
re.findall()
retorna uma lista de todas as correspondências não sobrepostas.
import re
text = "123 abc 456 def"
numbers = re.findall(r"d+", text)
print(numbers) # Saída: ['123', '456']
8. re.finditer()
: Iterando pelas Correspondências
re.finditer()
retorna um iterador, gerando objetos de correspondência. Mais eficiente em termos de memória para muitas correspondências em strings grandes.
import re
text = "123 abc 456 def"
for match in re.finditer(r"d+", text):
print(match.group(0)) # Saída: 123, 456 (em linhas separadas)
9. re.split()
: Separando Strings por Padrão
re.split()
separa uma string com base em um padrão.
import re
text = "apple,banana,cherry"
fruits = re.split(r",", text)
print(fruits) # Saída: ['apple', 'banana', 'cherry']
10. Padrões Básicos: Âncoras, Classes de Caracteres
.
: Corresponde a qualquer caractere, exceto nova linha.^
: Corresponde ao início da string.$
: Corresponde ao fim da string.[]
: Corresponde a um conjunto de caracteres (ex:[abc]
,[a-z]
).[^...]
: Corresponde a qualquer caractere *não* no conjunto (conjunto de caracteres negado).
11. Repetição: Quantificadores e Correspondência Gulosa vs. Não Gulosa
*
: Zero ou mais ocorrências.+
: Uma ou mais ocorrências.?
: Zero ou uma ocorrência.{m}
: Exatamentem
ocorrências.{m,n}
: Dem
an
ocorrências.*?
,+?
,??
,{m,n}?
: Versões não gulosas (corresponde à string mais curta possível).
12. Sequências Especiais: Dígitos, Espaços em Branco, Caracteres de Palavra
d
: Corresponde a qualquer dígito (0-9).D
: Corresponde a qualquer caractere que não seja dígito.s
: Corresponde a qualquer caractere de espaço em branco (espaço, tabulação, nova linha).S
: Corresponde a qualquer caractere que não seja espaço em branco.w
: Corresponde a qualquer caractere alfanumérico (letras, números, sublinhado).W
: Corresponde a qualquer caractere que não seja alfanumérico.
13. re.escape()
: Lidando com Caracteres Especiais
re.escape()
escapa caracteres especiais em uma string, permitindo que você a use como um padrão literal sem interpretações regex não intencionais.
14. Grupos de Captura e o Método group()
Parênteses ()
criam grupos de captura. O método group()
acessa substrings capturadas.
import re
text = "My phone number is 123-456-7890"
match = re.search(r"(d{3})-(d{3})-(d{4})", text)
if match:
area_code = match.group(1)
prefix = match.group(2)
line_number = match.group(3)
print(f"DDD: {area_code}, Prefixo: {prefix}, Número: {line_number}")
Este tutorial fornece uma base sólida no módulo re
do Python. Uma exploração adicional de técnicas avançadas aumentará significativamente suas capacidades de processamento de strings. Lembre-se de consultar a documentação oficial do Python para uma referência completa.