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 Ensaios é 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 = 'guru99@google.com, careerguru99@hotmail.com, users@yahoomail.com' 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 = 'guru99@google.com, careerguru99@hotmail.com, users@yahoomail.com' 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ários Python sinalizadores usados em métodos Regex são re.M, re.I, re.S, etc.