Python Tutorials

Dominando Expressões Regulares em Python

Spread the love

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

  1. re.match(): Casamento no Início
  2. re.search(): Encontrando a Primeira Correspondência
  3. re.compile(): Otimizando o Desempenho
  4. Flags: Modificando o Comportamento de Correspondência
  5. Conjuntos de Caracteres: Definindo Caracteres Permitidos
  6. Busca e Substituição com re.sub()
  7. re.findall(): Extraindo Todas as Correspondências
  8. re.finditer(): Iterando pelas Correspondências
  9. re.split(): Separando Strings por Padrão
  10. Padrões Básicos: Âncoras, Classes de Caracteres
  11. Repetição: Quantificadores e Correspondência Gulosa vs. Não Gulosa
  12. Sequências Especiais: Dígitos, Espaços em Branco, Caracteres de Palavra
  13. re.escape(): Lidando com Caracteres Especiais
  14. 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")

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}: Exatamente m ocorrências.
  • {m,n}: De m a n 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.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *