Expressões Regulares em Python
Este artigo explica as expressões regulares no Python.
Cobriremos uma ampla gama de tópicos, desde o uso básico do módulo re até o casamento de padrões complexos com expressões regulares.
YouTube Video
Expressões Regulares em Python
O módulo re é utilizado para buscar e manipular strings usando expressões regulares.
O que é o módulo re?
O módulo re está incluído na biblioteca padrão do Python e fornece funcionalidades para manipulação de strings usando expressões regulares. As expressões regulares são usadas para encontrar, extrair ou substituir padrões específicos de string de forma eficiente.
Padrões Básicos de Expressões Regulares
As expressões regulares definem padrões usando símbolos especiais. Abaixo estão alguns padrões básicos.
.: Qualquer caractere único^: Início de uma string$: Final de uma string\d: Qualquer dígito (0-9)\w: Qualquer caractere de palavra (a-z, A-Z, 0-9, _)\s: Qualquer caractere de espaço em branco*: Zero ou mais repetições+: Uma ou mais repetições[]: Classe de caracteres (ex.:[a-z]corresponde a letras minúsculas)
1import re
2
3pattern = r"\d{3}-\d{4}"
4text = "My postal code is 123-4567."
5result = re.search(pattern, text)
6if result:
7 print(result.group()) # Output: 123-4567
8
9# Define a pattern using basic regular expression symbols
10pattern = r"^\w+\s\d+\s[a-zA-Z]+$"
11
12# Example text to test the pattern
13text = "Room 23 Tokyo"
14
15# Check if the pattern matches the text
16result = re.match(pattern, text)
17if result:
18 print("Matched:", result.group())
19else:
20 print("No match")- Este código primeiro verifica se a string corresponde a um padrão de código postal. Em seguida, verifica se toda a string (do início ao fim) corresponde a um padrão composto por uma palavra, espaço em branco, dígitos, espaço em branco e uma palavra em inglês. Isso ajuda a entender como os elementos básicos das expressões regulares podem ser combinados.
Como Usar as Funções de Casamento
re.match()
re.match() verifica se o início da string corresponde ao padrão especificado.
1import re
2
3pattern = r"\w+"
4text = "Python is powerful"
5match = re.match(pattern, text)
6if match:
7 print(match.group()) # Output: Python- Este código verifica se a string começa com um caractere de palavra (alfanumérico ou sublinhado). A primeira palavra 'Python' corresponde ao padrão e é exibida.
re.search()
re.search() verifica toda a string e retorna a primeira correspondência.
1import re
2
3pattern = r"powerful"
4text = "Python is powerful and versatile"
5search = re.search(pattern, text)
6if search:
7 print(search.group()) # Output: powerful- Este código procura em toda a string a palavra 'powerful' e retorna a primeira correspondência. Como resultado,
re.search()retorna a string correspondente 'powerful'.
re.findall()
re.findall() retorna todas as correspondências do padrão como uma lista.
1import re
2
3pattern = r"\b\w{6}\b"
4text = "Python is powerful and versatile"
5matches = re.findall(pattern, text)
6print(matches) # Output: ['Python', 'strong']- Este código encontra todas as palavras com exatamente seis caracteres e as retorna como uma lista. 'Python' na string atende à condição, e a lista
['Python']é exibida.
re.finditer()
re.finditer() retorna todas as correspondências como um iterador, permitindo recuperar informações detalhadas para cada correspondência.
1import re
2
3pattern = r"\b\w{6}\b"
4text = "Python is powerful and versatile"
5matches = re.finditer(pattern, text)
6for match in matches:
7 print(match.group()) # Output: Python- Este código procura sequencialmente todas as palavras de seis letras e processa cada correspondência por meio de um iterador. 'Python' corresponde ao padrão aqui e é exibido.
Substituição e Divisão
re.sub()
re.sub() substitui partes da string que correspondem à expressão regular por outra string.
1import re
2
3pattern = r"\d+"
4text = "There are 100 apples"
5new_text = re.sub(pattern, "many", text)
6print(new_text) # Output: There are many apples- Este código substitui todos os dígitos na string por 'many'.
re.split()
re.split() divide a string nas partes que correspondem à expressão regular.
1import re
2
3pattern = r"\s+"
4text = "Python is powerful"
5parts = re.split(pattern, text)
6print(parts) # Output: ['Python', 'is', 'powerful']- Este código divide a string com base em um ou mais caracteres de espaço em branco. Como resultado, a string é dividida em palavras, produzindo
['Python', 'is', 'powerful'].
Grupos e Capturas
Usar agrupamento em expressões regulares facilita a extração de substrings correspondentes. Colocar entre parênteses () captura como um grupo.
1import re
2
3pattern = r"(\d{3})-(\d{4})"
4text = "My postal code is 123-4567."
5match = re.search(pattern, text)
6if match:
7 print(match.group(1)) # Output: 123
8 print(match.group(2)) # Output: 4567- Este código extrai os números de 3 e 4 dígitos como grupos separados de um código postal no formato '123-4567'.
group(1)retorna os três primeiros dígitos '123', egroup(2)retorna os quatro últimos dígitos '4567'.
Grupos nomeados
O uso de grupos nomeados permite recuperar valores por nomes significativos em vez de depender de índices. Abaixo está um exemplo concreto que extrai a data e o nível de um log.
1import re
2
3log = "2025-10-25 14:00:01 [ERROR] Something failed"
4
5pattern = r"(?P<date>\d{4}-\d{2}-\d{2}) (?P<time>\d{2}:\d{2}:\d{2}) \[(?P<level>[A-Z]+)\] (?P<msg>.*)"
6m = re.search(pattern, log)
7if m:
8 print(m.group("date"), m.group("time"), m.group("level"))
9 print("message:", m.group("msg"))- Este código usa grupos nomeados para extrair a data, a hora, o nível e a mensagem de uma string de log. Ele recupera os valores usando nomes significativos em vez de índices.
Usando Opções de Flags
O módulo re possui várias opções de flags para controlar o comportamento da busca.
re.IGNORECASE(re.I): Uma opção de flag que torna a correspondência insensível a maiúsculas e minúsculas.re.MULTILINE(re.M): Uma opção de flag que permite correspondências em várias linhas.re.DOTALL(re.S): Uma opção de flag onde o ponto.também corresponde a caracteres de nova linha.
1import re
2
3pattern = r"python"
4text = "Python is powerful"
5match = re.search(pattern, text, re.IGNORECASE)
6if match:
7 print(match.group()) # Output: Python- Este código procura a palavra 'python' sem diferenciar maiúsculas de minúsculas. Ao usar o sinalizador
re.IGNORECASE, ele também corresponde a 'Python'.
Vantagens dos objetos de expressão regular (re.compile)
Compilar um padrão com re.compile torna o reuso mais eficiente e melhora a legibilidade. Você também pode definir sinalizadores aqui.
O exemplo a seguir procura repetidamente por correspondências em várias linhas usando um padrão compilado. Se você usar o mesmo padrão com frequência, compilá-lo com re.compile melhora o desempenho.
1import re
2
3pattern = re.compile(r"User: (\w+), ID: (\d+)")
4text = "User: alice, ID: 1\nUser: bob, ID: 2"
5
6for m in pattern.finditer(text):
7 print(m.groups())- Este código usa uma expressão regular compilada para extrair nomes de usuário e IDs de várias linhas.
re.compilemelhora a eficiência ao reutilizar o mesmo padrão e também torna o código mais legível.
Aplicações
Por exemplo, considere um script que extrai todos os endereços de e-mail de um arquivo de texto.
1import re
2
3pattern = r"[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}"
4text = "Contact us at info@example.com or support@service.com."
5emails = re.findall(pattern, text)
6print(emails) # Output: ['info@example.com', 'support@service.com']- Este código encontra todos os endereços de e-mail na string e os extrai como uma lista.
Conclusão
O módulo re é uma ferramenta poderosa para manipulação de strings em Python. Aqui, abordamos desde o uso básico até expressões regulares avançadas utilizando agrupamentos e opções de flags. As expressões regulares do Python são muito poderosas e uma ferramenta indispensável para o processamento de texto.
Você pode acompanhar o artigo acima usando o Visual Studio Code em nosso canal do YouTube. Por favor, confira também o canal do YouTube.