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โ€.

Exemplo de expressรฃo w+ e ^

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.

\s expressรฃo na funรงรฃo re.split

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.

\s expressรฃo na funรงรฃo re.split

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.

revanche()

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

usar pesquisa()

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.

 Use re.findall() em Python

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.

Exemplo de sinalizadores re.M ou multilinha

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()
re.findall() รฉ usado para encontrar todas as ocorrรชncias de um padrรฃo em uma string.

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
\d representa qualquer dรญgito (0-9).

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)
re.split(r'\s', string) divide uma string com base em espaรงos usando a expressรฃo \s.

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.
re.match() procura um padrรฃo no inรญcio de uma string, enquanto re.search() procura um padrรฃo em qualquer lugar da string.

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.

Resuma esta postagem com: