Python RegEx: re.match(), re.search(), re.findall() com exemplo
O que รฉ expressรฃo regular em Python?
A Expressรฃo regular (RE) em uma linguagem de programaรงรฃo รฉ uma sequรชncia de texto especial usada para descrever um padrรฃo de pesquisa. ร extremamente รบtil para extrair informaรงรตes de textos como cรณdigos, arquivos, log, planilhas ou atรฉ mesmo documentos.
Ao usar o Python expressรฃo regular, a primeira coisa a reconhecer รฉ que tudo รฉ essencialmente um caractere, e estamos escrevendo padrรตes para corresponder a uma sequรชncia especรญfica de caracteres, tambรฉm conhecida como string. Letras Ascii ou latinas sรฃo aquelas que estรฃo em seus teclados e Unicode รฉ usado para corresponder ao texto estrangeiro. Inclui dรญgitos e pontuaรงรฃo e todos os caracteres especiais como $#@!%, etc.
Por exemplo, um Python uma expressรฃo regular poderia dizer a um programa para procurar um texto especรญfico na string e entรฃo imprimir o resultado de acordo. A expressรฃo pode incluir
- Correspondรชncia de texto
- Repetiรงรฃo
- Ramificaรงรฃo
- Composiรงรฃo de padrรตes etc.
Expressรฃo regular ou RegEx em Python รฉ denotado como RE (REs, regexes ou padrรฃo regex) sรฃo importados atravรฉs mรณdulo re. Python oferece suporte a expressรตes regulares por meio de bibliotecas. RegEx em Python suporta vรกrias coisas como Modificadores, identificadores e caracteres de espaรงo em branco.
| Identificadores | Modificadores | Caracteres de espaรงo em branco | Fuga necessรกria |
|---|---|---|---|
| \d= qualquer nรบmero (um dรญgito) | \d representa um dรญgito.Ex: \d{1,5} irรก declarar dรญgitos entre 1,5 como 424,444,545 etc. | \n = nova linha | . + * ? []$^(){} | \ |
| \D= qualquer coisa menos um nรบmero (um nรฃo-dรญgito) | + = corresponde a 1 ou mais | \s= espaรงo | |
| \s = espaรงo (guia, espaรงo, nova linha etc.) |
? = corresponde a 0 ou 1 | \t = aba | |
| \S= tudo menos um espaรงo | * = 0 ou mais | \e = escapar | |
| \w = letras (Corresponde ao caractere alfanumรฉrico, incluindo โ_โ) | $ corresponde ao final de uma string | \r = retorno de carro | |
| \W = qualquer coisa, menos letras (Corresponde a um caractere nรฃo alfanumรฉrico, excluindo โ_โ) | ^ corresponde ao inรญcio de uma string | \f= feed de formulรกrio | |
| . = qualquer coisa, menos letras (pontos) | | corresponde a ou x/y | ------ | |
| \b = qualquer caractere exceto nova linha | [] = intervalo ou โvariรขnciaโ | ------ | |
| \. | {x} = esta quantidade de cรณdigo anterior | ------ |
Sintaxe de Expressรฃo Regular (RE)
import re
- Mรณdulo โreโ incluรญdo com Python usado principalmente para pesquisa e manipulaรงรฃo de strings
- Tambรฉm usado com frequรชncia para pรกginas da web โRaspagemโ(extrair grande quantidade de dados de sites)
Comeรงaremos o tutorial de expressรตes com este exercรญcio simples usando as expressรตes (w+) e (^).
Exemplo de expressรฃo w+ e ^
- โ^โ: Esta expressรฃo corresponde ao inรญcio de uma string
- โC+โ: Esta expressรฃo corresponde ao caractere alfanumรฉrico da string
Aqui veremos um Python RegEx Exemplo de como podemos usar as expressรตes w+ e ^ em nosso cรณdigo. Cobrimos a funรงรฃo re.findall() em Python, mais adiante neste tutorial, mas por enquanto nos concentraremos apenas nas expressรตes \w+ e \^.
Por exemplo, para nossa string โguru99, a educaรงรฃo รฉ divertidaโ se executarmos o cรณdigo com w+ e^, a saรญda serรก โguru99โ.
import re xx = "guru99,education is fun" r1 = re.findall(r"^\w+",xx) print(r1)
Lembre-se, se vocรช remover o sinal + do w+, a saรญda mudarรก e fornecerรก apenas o primeiro caractere da primeira letra, ou seja, [g]
Exemplo de expressรฃo \s na funรงรฃo re.split
- โsโ: Esta expressรฃo รฉ usada para criar um espaรงo na string
Para entender como esse RegEx funciona Python funciona, comeรงamos com um simples Python RegEx Exemplo de uma funรงรฃo de divisรฃo. No exemplo, dividimos cada palavra usando a funรงรฃo โre.splitโ e ao mesmo tempo usamos a expressรฃo \s que permite analisar cada palavra da string separadamente.
Quando vocรช executa este cรณdigo, vocรช obtรฉm a saรญda ['nรณs', 'somos', 'divisรฃo', 'o', 'palavras'].
Agora, vamos ver o que acontece se vocรช remover โ\โ de s. Nรฃo hรก alfabeto 's' na saรญda, isso ocorre porque removemos '\' da string e ele avalia โsโ como um caractere regular e, portanto, divide as palavras sempre que encontra โsโ na string.
Da mesma forma, hรก uma sรฉrie de outros Python expressรฃo regular que vocรช pode usar de vรกrias maneiras em Python como \d,\D,$,\.,\b, etc.
Aqui estรก o cรณdigo completo
import re xx = "guru99,education is fun" r1 = re.findall(r"^\w+", xx) print((re.split(r'\s','we are splitting the words'))) print((re.split(r's','split the words')))
A seguir, veremos os tipos de mรฉtodos que sรฃo usados โโcom expressรตes regulares em Python.
Usando mรฉtodos de expressรฃo regular
O pacote โreโ fornece vรกrios mรฉtodos para realmente realizar consultas em uma string de entrada. Veremos os mรฉtodos de re em Python:
- revanche()
- pesquisa()
- re.encontrar()
Observaรงรฃo: Com base nas expressรตes regulares, Python oferece duas operaรงรตes primitivas diferentes. O mรฉtodo match verifica se hรก uma correspondรชncia apenas no inรญcio da string, enquanto search verifica se hรก uma correspondรชncia em qualquer lugar da string.
revanche()
revanche() funรงรฃo de re em Python irรก pesquisar o padrรฃo de expressรฃo regular e retornar a primeira ocorrรชncia. O Python O mรฉtodo RegEx Match verifica uma correspondรชncia apenas no inรญcio da string. Portanto, se uma correspondรชncia for encontrada na primeira linha, ele retornarรก o objeto match. Mas se uma correspondรชncia for encontrada em alguma outra linha, o Python A funรงรฃo RegEx Match retorna nulo.
Por exemplo, considere o seguinte cรณdigo de Python funรงรฃo re.match(). As expressรตes โw+โ e โ\Wโ corresponderรฃo ร s palavras que comeรงam com a letra 'g' e, a partir daรญ, tudo o que nรฃo for iniciado com 'g' nรฃo serรก identificado. Para verificar a correspondรชncia de cada elemento na lista ou string, executamos o forloop neste Python re.match() Exemplo.
re.search(): Encontrando padrรฃo no texto
pesquisa() A funรงรฃo pesquisarรก o padrรฃo de expressรฃo regular e retornarรก a primeira ocorrรชncia. Diferente Python re.match(), ele verificarรก todas as linhas da string de entrada. O Python A funรงรฃo re.search() retorna um objeto de correspondรชncia quando o padrรฃo รฉ encontrado e โnuloโ se o padrรฃo nรฃo for encontrado
Como usar a pesquisa()?
Para usar a funรงรฃo search(), vocรช precisa importar Python re mรณdulo primeiro e depois execute o cรณdigo. O Python A funรงรฃo re.search() pega o โpadrรฃoโ e o โtextoโ para digitalizar a partir de nossa string principal
Por exemplo, aqui procuramos duas strings literais โTeste de softwareโ โguru99โ, em uma string de texto โSoftware Testes รฉ divertidoโ. Para โteste de softwareโ encontramos a correspondรชncia, portanto, ele retorna a saรญda de Python re.search() Exemplo como โencontrou uma correspondรชnciaโ, enquanto para a palavra โguru99โ nรฃo foi possรญvel encontrar na string, portanto, ela retorna a saรญda como โSem correspondรชnciaโ.
re.encontrar()
encontrar tudo() O mรณdulo รฉ usado para pesquisar โtodasโ as ocorrรชncias que correspondem a um determinado padrรฃo. Por outro lado, o mรณdulo search() retornarรก apenas a primeira ocorrรชncia que corresponda ao padrรฃo especificado. findall() irรก iterar sobre todas as linhas do arquivo e retornarรก todas as correspondรชncias de padrรฃo nรฃo sobrepostas em uma รบnica etapa.
Como usar re.findall() em Python?
Aqui temos uma lista de endereรงos de e-mail e queremos que todos os endereรงos de e-mail sejam obtidos da lista. Usamos o mรฉtodo re.findall() em Python. Ele encontrarรก todos os endereรงos de e-mail da lista.
Aqui estรก o cรณdigo completo para exemplo de re.findall()
import re
list = ["guru99 get", "guru99 give", "guru Selenium"]
for element in list:
z = re.match("(g\w+)\W(g\w+)", element)
if z:
print((z.groups()))
patterns = ['software testing', 'guru99']
text = 'software testing is fun?'
for pattern in patterns:
print('Looking for "%s" in "%s" ->' % (pattern, text), end=' ')
if re.search(pattern, text):
print('found a match!')
else:
print('no match')
abc = '[email protected], [email protected], [email protected]'
emails = re.findall(r'[\w\.-]+@[\w\.-]+', abc)
for email in emails:
print(email)
Python Bandeiras
Muitos Python Os mรฉtodos Regex e as funรงรตes Regex recebem um argumento opcional chamado Flags. Esses sinalizadores podem modificar o significado do dado Python Padrรฃo Regex. Para entendรช-los, veremos um ou dois exemplos dessas bandeiras.
Vรกrias bandeiras usadas em Python inclui
| Sintaxe para sinalizadores Regex | O que esta bandeira faz |
|---|---|
| [re.M] | Faรงa o inรญcio/fim considerar cada linha |
| [re.I] | Ignora o caso |
| [re.S] | Fazer [ . ] |
| [re.U] | Faรงa { \w,\W,\b,\B} segue as regras Unicode |
| [re.L] | Faรงa {\w,\W,\b,\B} seguir a localidade |
| [re.X] | Permitir comentรกrio em Regex |
Exemplo de sinalizadores re.M ou multilinha
Em multilinha, o caractere padrรฃo [^] corresponde ao primeiro caractere da string e ao inรญcio de cada linha (seguindo imediatamente apรณs cada nova linha). Enquanto a expressรฃo โwโ pequeno รฉ usada para marcar o espaรงo com caracteres. Quando vocรช executa o cรณdigo, a primeira variรกvel โk1โ imprime apenas o caractere 'g' para a palavra guru99, enquanto que quando vocรช adiciona o sinalizador multilinha, ela busca os primeiros caracteres de todos os elementos da string.
Aqui estรก o cรณdigo
import re xx = """guru99 careerguru99 selenium""" k1 = re.findall(r"^\w", xx) k2 = re.findall(r"^\w", xx, re.MULTILINE) print(k1) print(k2)
- Declaramos a variรกvel xx para string โguru99โฆ. carreiraguru99โฆ.selรชnioโ
- Execute o cรณdigo sem usar flags multiline, ele fornece a saรญda apenas 'g' das linhas
- Execute o cรณdigo com flag โmultilineโ, quando vocรช imprime 'k2' ele dรก a saรญda como 'g', 'c' e 's'
- Portanto, podemos ver a diferenรงa antes e depois de adicionar multilinhas no exemplo acima.
Da mesma forma, vocรช tambรฉm pode usar outros Python sinalizadores como re.U (Unicode), re.L (seguir localidade), re.X (permitir comentรกrio), etc.
Python 2 Exemplo
Os cรณdigos acima sรฃo Python 3 exemplos, se vocรช quiser correr Python 2 considere o seguinte cรณdigo.
# Example of w+ and ^ Expression
import re
xx = "guru99,education is fun"
r1 = re.findall(r"^\w+",xx)
print r1
# Example of \s expression in re.split function
import re
xx = "guru99,education is fun"
r1 = re.findall(r"^\w+", xx)
print (re.split(r'\s','we are splitting the words'))
print (re.split(r's','split the words'))
# Using re.findall for text
import re
list = ["guru99 get", "guru99 give", "guru Selenium"]
for element in list:
z = re.match("(g\w+)\W(g\w+)", element)
if z:
print(z.groups())
patterns = ['software testing', 'guru99']
text = 'software testing is fun?'
for pattern in patterns:
print 'Looking for "%s" in "%s" ->' % (pattern, text),
if re.search(pattern, text):
print 'found a match!'
else:
print 'no match'
abc = '[email protected], [email protected], [email protected]'
emails = re.findall(r'[\w\.-]+@[\w\.-]+', abc)
for email in emails:
print email
# Example of re.M or Multiline Flags
import re
xx = """guru99
careerguru99
selenium"""
k1 = re.findall(r"^\w", xx)
k2 = re.findall(r"^\w", xx, re.MULTILINE)
print k1
print k2
Teste o seu Python Recursos Educacionais
1. Qual mรฉtodo รฉ usado para encontrar todas as ocorrรชncias de um padrรฃo em uma string?
- pesquisa()
- revanche()
- re.encontrar()
- re.split()
2. O que a classe de caracteres \d representa em expressรตes regulares?
- Qualquer dรญgito (0-9)
- Qualquer caractere nรฃo-dรญgito
- Qualquer caractere de espaรงo em branco
- Qualquer letra ou nรบmero
3. Qual funรงรฃo vocรช usaria para dividir uma string com base em espaรงos?
- re.split(r'\s', string)
- re.findall(r'\w+', string)
- re.match(r'\s+', sequรชncia de caracteres)
- re.split(r'\w+', string)
4. Qual รฉ a principal diferenรงa entre re.match() e re.search()?
- re.match() procura um padrรฃo no inรญcio de uma string, enquanto re.search() procura um padrรฃo em qualquer lugar da string.
- re.match() retorna todas as correspondรชncias, enquanto re.search() retorna a primeira correspondรชncia.
- re.search() รฉ mais rรกpido que re.match().
- Ambas as funรงรตes se comportam da mesma maneira.
Resumo
Uma expressรฃo regular em um linguagem de programaรงรฃo รฉ uma sequรชncia de texto especial usada para descrever um padrรฃo de pesquisa. Inclui dรญgitos e pontuaรงรฃo e todos os caracteres especiais como $#@!%, etc. A expressรฃo pode incluir literal
- Correspondรชncia de texto
- Repetiรงรฃo
- Ramificaรงรฃo
- Composiรงรฃo de padrรตes etc.
In Python, uma expressรฃo regular รฉ denotada como RE (REs, regexes ou padrรฃo regex) sรฃo incorporados por meio de Python mรณdulo re.
- Mรณdulo โreโ incluรญdo com Python usado principalmente para pesquisa e manipulaรงรฃo de strings
- Tambรฉm usado com frequรชncia para โScrapingโ de pรกginas da web (extrair grande quantidade de dados de sites)
- Os mรฉtodos de expressรฃo regular incluem re.match(),re.search()& re.findall()
- Outros Python Os mรฉtodos de substituiรงรฃo RegEx sรฃo sub() e subn() que sรฃo usados โโpara substituir strings correspondentes em re
- Python Bandeiras Muitos Python Mรฉtodos Regex e funรงรตes Regex recebem um argumento opcional chamado Flags
- Esses sinalizadores podem modificar o significado de um determinado padrรฃo Regex
- Vรกrias Python sinalizadores usados โโโโem mรฉtodos Regex sรฃo re.M, re.I, re.S, etc.







