Python: Guia sobre Expressões Regulares
As expressões regulares, ou regex, constituem uma ferramenta extremamente versátil e poderosa em programação, especialmente útil para a manipulação de strings. Em Python, a biblioteca re
é o coração dessa funcionalidade, permitindo aos desenvolvedores realizar buscas complexas, substituições e outras operações de texto com simplicidade e eficiência. Este artigo aborda os fundamentos das expressões regulares em Python, desde a sintaxe básica até exemplos práticos de uso.
Introdução às Expressões Regulares em Python
Uma expressão regular é uma sequência de caracteres que forma um padrão de busca. Esse padrão é utilizado para verificar a presença de sequências de caracteres dentro de uma string, oferecendo uma maneira flexível e eficiente de analisar textos. As aplicações de regex variam desde a validação de formatos de dados (como emails e números de telefone) até a extração de informações específicas de grandes volumes de texto.
A Biblioteca re
em Python
Para utilizar expressões regulares em Python, primeiro, é necessário importar a biblioteca re
, utilizando o comando import re
. Esta biblioteca inclui várias funções que facilitam a aplicação de expressões regulares em strings.
Principais Funções da Biblioteca re
re.search(pattern, string)
: Procura pela primeira ocorrência de um padrão dentro de uma string. Retorna um objeto Match
se encontra uma correspondência; caso contrário, retorna None
.
re.match(pattern, string)
: Similar a search
, mas busca o padrão apenas no início da string.
re.findall(pattern, string)
: Retorna uma lista contendo todas as ocorrências não sobrepostas de um padrão dentro de uma string.
re.sub(pattern, repl, string)
: Substitui as ocorrências do padrão na string pelo texto de substituição repl
.
Sintaxe das Expressões Regulares em Python
A sintaxe de uma expressão regular pode parecer complexa à primeira vista, mas segue regras claras:
Caracteres Literais: São utilizados para buscar a correspondência exata de caracteres específicos. Por exemplo, a regex a
corresponderá à letra "a" em uma string.
.
(Ponto): Corresponde a qualquer caractere único, exceto novas linhas.
^
e $
: Respectivamente, correspondem ao início e ao fim de uma string. ^a
corresponde a qualquer string que comece com "a".
[...]
e [^...]
: O primeiro corresponde a qualquer caractere dentro dos colchetes; o segundo, a qualquer caractere não listado entre eles.
|
(Pipe): Funciona como um operador OR, buscando a correspondência de qualquer expressão à esquerda ou à direita do pipe.
Quantificadores: *
(0 ou mais), +
(1 ou mais), ?
(0 ou 1), {n}
, {n,}
, {n,m}
controlam quantas vezes um elemento pode ocorrer.
Exemplos Práticos na Linguagem Python
Validando Números de Telefone
Vamos começar com um exemplo simples: a validação de um número de telefone no formato 123-456-7890
.
import re
telefone = "Meu número é 123-456-7890."
padrao = r"\d{3}-\d{3}-\d{4}"
resultado = re.search(padrao, telefone)
if resultado:
print("Número válido encontrado:", resultado.group())
else:
print("Formato inválido.")
Neste código, \d{3}-\d{3}-\d{4}
é o padrão que define o formato do número de telefone, onde \d
representa um dígito numérico e {n}
especifica a quantidade exata de vezes que o dígito deve aparecer.
Para melhor entendimento sobre o uso de estruturas condicionais recomendo a leitura desse artigo:
Buscando e Substituindo E-mails
Consideremos agora um exemplo que busca e substitui todos os endereços de e-mail em um dado texto por <e-mail ocultado>
.
texto = "Para mais informações, contate info@exemplo.com ou suporte@exemplo.com."
padrao = r"\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b"
substituido = re.sub(padrao,
"<e-mail ocultado>", texto)
print(substituido)
Aqui, utilizamos uma expressão regular um pouco mais complexa para combinar com endereços de e-mail e a função re.sub
para substituir as correspondências encontradas.
As expressões regulares oferecem uma forma poderosa e flexível de trabalhar com texto em Python. Dominar o uso da biblioteca re
e entender a sintaxe de regex pode significativamente aumentar a eficiência de suas operações de manipulação de string. Embora possa parecer desafiador no início, a prática levará a uma compreensão profunda e à capacidade de resolver problemas complexos de processamento de texto com facilidade.