Tutorial de expressões regulares Python | Tutorial de Python Regex

Conteúdo

Relevância das expressões regulares

Nos últimos anos, houve uma mudança dramática no uso de linguagens de programação de propósito geral para ciência de dados e aprendizado de máquina. Este nem sempre foi o caso: uma década atrás, Este pensamento teria encontrado muitos olhos céticos!

Isso significa que mais pessoas / instituições estão usando ferramentas como Python / JavaScript para resolver suas necessidades de dados. É aqui que as expressões regulares se tornam muito úteis. As expressões regulares são regularmente a maneira padrão de limpar e contestar dados na maioria dessas ferramentas.. A extração de partes específicas do texto de páginas da web, entender os dados do Twitter ou preparar seus dados para mineração de texto, regex é sua melhor escolha para todas essas tarefas.

Dada sua aplicabilidade, faz sentido conhecê-los e usá-los corretamente.

O que você aprenderá com esta postagem?

Neste post, Eu vou te guiar pelo uso, exemplos e aplicações de expressões regulares. As expressões regulares são muito populares entre os programadores e podem ser aplicadas em muitas linguagens de programação, como Java, JS, php, C ++, etc. Para desenvolver nossa compreensão, explicamos esse conceito usando a linguagem de programação Python. Até o fim, eu resolvi vários problemas usando regex.

aprender expressões regulares em python

Vamos começar!

O que é expressão regular e como ela é usada?

Resumidamente, expressão regular é uma sequência de caracteres que são usados ​​principalmente para encontrar e substituir padrões em uma string ou arquivo. Como eu mencionei antes, são compatíveis com a maioria das linguagens de programação como python, perl, R, Java e muitos outros. Então, aprendê-los ajuda de várias maneiras (Mais sobre isso depois).

As expressões regulares usam dois tipos de caracteres:

uma) Metacaracteres: como o nome sugere, esses personagens têm um significado especial, equivalente a * no curinga.

b) Literais (Como a, b, 1,2…)

E Python, nós temos o módulo “O que ajuda com expressões regulares. Então você precisa importar a biblioteca antes de usar expressões regulares em Python.

Use este código -> Importar re

Os usos mais comuns de expressões regulares são:

  • Procure por uma string (pesquisar e combinar)
  • Encontre uma corda (encontrar tudo)
  • Divida a string em uma substring (dividir)
  • Substitua parte de uma corda (sub)

Vamos ver os métodos que a biblioteca “”Fornece para executar essas tarefas.

Observação: Nós também temos um curso de video no processamento de linguagem natural, que também cobre expressões regulares. Confira!

Quais são os diferentes métodos regex?

O pacote é’ fornece vários métodos para consultar uma string de entrada. Aqui estão os métodos mais usados, Eu discutirei:

  1. revanche()
  2. investigar()
  3. re.findall ()
  4. re.split ()
  5. re.sub ()
  6. re.compilar ()

Vamos vê-los um por um.

revanche(Padrão, corda):

Este método encontra uma correspondência se ocorrer no início da string. Como um exemplo, jogo de chamada () en la cadena ‘AV Analytics AV’ e procure um 'padrão AV’ vai combinar. Apesar disto, se olharmos apenas para o Analytics, o padrão não vai combinar. Vamos fazer em Python agora.

Aqui está uma janela de codificação ao vivo para você começar. Você pode executar os códigos e obter o resultado nesta janela:

Acima você pode ver a posição inicial e final do padrão correspondente ‘AV’ na corda e, às vezes, ajuda muito ao realizar a manipulação de corda.

investigar(Padrão, corda):

É equivalente a combinar () mas não nos limita a procurar correspondências apenas no início da string. Ao contrário do método anterior, aqui a busca pelo 'padrão Analytics’ retornará uma partida.

Código

resultado = .procurar(r'Analytics ', 'AV DataPeaker AV')
imprimir resultado.grupo(0)
Saída:
Analytics

Aqui você pode ver que o método de pesquisa () pode encontrar um padrão de qualquer posição na string, mas só retorna a primeira ocorrência do padrão de pesquisa.

re.findallPadrão, corda):

Isso ajuda a obter uma lista de todos os padrões correspondentes. Você não tem restrições de pesquisa do início ou do fim. Se usarmos o método findall para pesquisar 'AV’ em uma determinada string, retornará ambas as ocorrências de AV. Enquanto procura por uma string, Eu recomendo que você use re.findall () para sempre, pode funcionar como pesquisa () y re.match () ambos.

Código

resultado = .encontrar tudo(âmbar', 'AV DataPeaker AV')
imprimir resultado

Saída:
['DO', 'DO']

re.splitPadrão, corda, [maxsplit = 0]):

Este método ajuda a dividir corda por ocorrências de dado Padrão.

Código

resultado=.dividir(r'y ','Analytics')
resultado

Saída:
['Anal', 'tiques']

Acima, nós dividimos a cadeia “Analytics” por “e”. O método de divisão () tem outro argumento “maxsplit“. Tem um valor padrão de zero. Nesta circunstância faz as divisões máximas que podem ser feitas, mas se dermos valor a maxsplit, vai dividir a corrente. Vamos ver o seguinte exemplo:

Código

resultado=.dividir(r'i ','DataPeaker')
resultado de impressão

Saída:
['Analyt', 'cs V', 'dhya'] #Ele executou todas as divisões que podem ser feitas por padrão "eu".

Código

resultado=.dividir(r'i ','DataPeaker',maxsplit=1)
resultado

Saída:
['Analyt', 'cs Vidya']

Aqui, você pode ver que definimos maxsplit em 1. E o resultado é que ele só tem dois valores, enquanto o primeiro exemplo tem três valores.

re.subPadrão, respondedor, corda):

Ajuda a encontrar um padrão e substituí-lo por uma nova substring. Se o padrão não for encontrado, corda é devolvido inalterado.

Código

resultado=.sub(r'India ','o mundo','AV é a maior comunidade Analytics da Índia')
resultado
Saída:
'AV é a maior comunidade Analytics do mundo'

re.compilarPadrão, respondedor, corda):

Podemos combinar um padrão regex em objetos padrão, que pode ser usado para combinar padrões. Também é útil pesquisar um padrão novamente sem digitá-lo novamente..

Código

importar padronizar=.compilar('DO')
resultado=padronizar.encontrar tudo('AV DataPeaker AV')
imprimir resultado
resultado2=padronizar.encontrar tudo('AV é a maior comunidade analítica da Índia')
imprimir resultado2
Saída:
['DO', 'DO']
['DO']

Resumo rápido de vários métodos:

Até o momento, analisamos vários métodos regex usando um padrão constante (personagens fixos). Mas, E se não tivermos um padrão de pesquisa constante e quisermos retornar um conjunto específico de caracteres (definido por uma regra) de uma corrente? Não se deixe intimidar.

Isso pode ser facilmente resolvido definindo uma expressão com a ajuda de operadores de padrão (caracteres meta e literais). Vejamos os operadores de padrão mais comuns.

Quais são os operadores mais usados?

Expressões regulares podem especificar padrões, não apenas personagens fixos. Estes são os operadores mais usados ​​que ajudam a gerar uma expressão para representar os caracteres requeridos em uma string ou arquivo. Normalmente usado em web scrapping e text mining para extrair as informações necessárias.

Operadores Descrição
. Corresponde a qualquer caractere único, exceto a nova linha ‘ n ’.
? concordar com 0 o 1 aparência do padrão à sua esquerda
+ 1 ou mais ocorrências do padrão à sua esquerda
* 0 ou mais aparições do padrão à sua esquerda
C Corresponde a um caractere alfanumérico enquanto W (W mayúscula) corresponde a um caractere não alfanumérico.
D Correspondências de dígitos [0-9] e / D (D mayúscula) não corresponde a dígitos.
s Corresponde a um único caractere de espaço em branco (espaço, nova linha, retorno, tabulação, Formato) y S (S mayúscula) corresponde a qualquer caractere sem espaço em branco.
B limite entre palavra e não palavra e / B é oposto / b
[..] Corresponde a qualquer caractere único em um colchete e [^ ..] corresponde a qualquer caractere único que não esteja entre colchetes
Usado para caracteres de significado especial como . para coincidir com um ponto ou + para o sinal de mais.
^ e $ ^ e $ coincidir com o início ou final da string, respectivamente
{Novo México} Corresponde a pelo menos n e no máximo m ocorrências da expressão anterior, se a escrevermos como {, m} então ele retornará pelo menos qualquer ocorrência mínima para o máximo m precedente à expressão.
uma | B Corresponde a a ou b
() Agrupe expressões regulares e retorne o texto correspondente
t, n, r Guia de correspondências, nova linha, retorno

Para mais detalhes sobre metacaracteres “(“, “)”, “|” e outros detalhes, você pode verificar este link (https://docs.python.org/2/library/re.html).

Agora, Vamos entender os operadores de padrão observando os exemplos a seguir.

Alguns exemplos de expressões regulares

Problema 1: Retorna a primeira palavra de uma determinada string

Solução-1 Extraia cada personagem (usando “ C)

Código

importar resultado=.encontrar tudo(r '.','AV é a maior comunidade Analytics da Índia')
imprimir resultado

Saída:
['UMA', 'V', '', 'eu', 's', '', 'eu', 'uma', 'r', 'g', 'e', 's', 't', '', 'UMA', 'n', 'uma', 'eu', 'e', 't', 'eu', 'c', 's', '', 'c', 'o', 'm', 'm', 'você', 'n', 'eu', 't', 'e', '', 'o', 'f', '', 'EU', 'n', 'd', 'eu', 'uma']

Acima também extrai espaço, agora para evitar que seja usado “ C” ao invés de “.“.

Código

resultado=.encontrar tudo(r'w ','AV é a maior comunidade Analytics da Índia')
imprimir resultado

Saída:
['UMA', 'V', 'eu', 's', 'eu', 'uma', 'r', 'g', 'e', 's', 't', 'UMA', 'n', 'uma', 'eu', 'e', 't', 'eu', 'c', 's', 'c', 'o', 'm', 'm', 'você', 'n', 'eu', 't', 'e', 'o', 'f', 'EU', 'n', 'd', 'eu', 'uma']

Solução 2 Extraia cada palavra (usando “*” o “+)

Código

resultado=.encontrar tudo(r'w * ','AV é a maior comunidade Analytics da Índia')
imprimir resultado

Saída:
['DO', '', 'é', '', 'maior', '', 'Analytics', '', 'comunidade', '', 'do', '', 'Índia', '']

Mais uma vez, está retornando o espaço como uma palavra porque “*”Retorna zero ou mais correspondências de padrão à sua esquerda. Agora, apagar os espaços, nós iremos com “+“.

Código

resultado=.encontrar tudo(r'w + ','AV é a maior comunidade Analytics da Índia')
imprimir resultado
Saída:
['DO', 'é', 'maior', 'Analytics', 'comunidade', 'do', 'Índia']

Solução 3 Extraia cada palavra (usando “^)

Código

resultado=.encontrar tudo(r '^ w +','AV é a maior comunidade Analytics da Índia')
imprimir resultado

Saída:
['DO']

Se usarmos "$" em vez de "^", retornará a palavra do final da string. Veámoslo.

Código

resultado=.encontrar tudo(r'w + $ ','AV é a maior comunidade Analytics da Índia')
imprimir resultado
Saída:

['Índia']

Problema 2: Retorna os primeiros dois caracteres de cada palavra

Solução-1 Extraia dois caracteres consecutivos de cada palavra, excluindo espaços (usando “ C)

Código

resultado = re.findall(r'ww ','AV é a maior comunidade Analytics da Índia')
resultado de impressão

Saída:
['DO', 'é', 'a', 'rg', 'isto é', 'Um', 'al', 'yt', 'ic', 'co', 'milímetros', 'uma', 'isto', 'do', 'No', 'a partir de']

Solução 2 Extraia dois caracteres consecutivos daqueles disponíveis no início do limite da palavra (usando “B)

resultado=.encontrar tudo(r'bw. ','AV é a maior comunidade Analytics da Índia')
imprimir resultado

Saída:
['DO', 'é', 'a', 'Um', 'co', 'do', 'No']

Problema 3: Retorna o tipo de domínio dos IDs de e-mail fornecidos

Para explicar simplesmente, Eu irei novamente com uma abordagem passo a passo:

Solução-1 Extraia todos os personagens após “@”

Código

resultado=.encontrar tudo(r '@ w +','[e-mail protegido], [e-mail protegido], [e-mail protegido], [e-mail protegido]') 
imprimir resultado 
Saída: ['@gmail', '@teste', '@analyticsvidhya', '@descanso']

Acima, você pode ver que a parte “.com”, “.no” não é extraído. Para adicionar, nós iremos com o seguinte código.

resultado = re.findall(r'@w+.w+ ','[e-mail protegido], [e-mail protegido], [e-mail protegido], [e-mail protegido]')
resultado de impressão
Saída:
['@ gmail.com', '@ test.in', '@ analyticsvidhya.com', '@ rest.biz']

Solução – 2 Extraia apenas o nome de domínio usando “()”

Código

resultado = re.findall(r '@ w +.(w +)','[e-mail protegido], [e-mail protegido], [e-mail protegido], [e-mail protegido]')
resultado de impressão
Saída:
['com', 'no', 'com', 'biz']

Problema 4: data de retorno da string dada

Aqui vamos usar “D”Para extrair o dígito.

Solução:

Código

resultado = re.findall(r'd{2}-d{2}-d{4}','Amit 34-3456 12-05-2007, XYZ 56-4532 11-11-2011, abc 67-8945 12-01-2009')
resultado de impressão
Saída:
['12 -05-2007 ', '11 -11-2011 ', '12 -01-2009 ']

Se você deseja extrair apenas um ano, o parêntese "()" isso vai te ajudar.

Código


resultado=.encontrar tudo(r'd{2}-d{2}-(d{4})','Amit 34-3456 12-05-2007, XYZ 56-4532 11-11-2011, abc 67-8945 12-01-2009')
imprimir resultado
Saída:
['2007', '2011', '2009']

Problema 5: Retorna todas as palavras em uma string que começam com uma vogal

Solução-1 Retorna todas as palavras

Código

resultado=.encontrar tudo(r'w + ','AV é a maior comunidade Analytics da Índia')
imprimir resultado

Saída:
['DO', 'é', 'maior', 'Analytics', 'comunidade', 'do', 'Índia']

Solução 2 As palavras de retorno começam com alfabetos (usando [])

Código

resultado=.encontrar tudo(r '[aeiouAEIOU]w + ','AV é a maior comunidade Analytics da Índia')
imprimir resultado

Saída:
['DO', 'é', 'argest', 'Analytics', 'omunidade', 'do', 'Índia']

Acima você pode ver que ele voltou “argest” e “comunidade” do meio das palavras. Para apagar esses dois, precisamos usar ” b” para o limite da palavra.

Solução 3

Código

resultado=.encontrar tudo(r'b[aeiouAEIOU]w + ','AV é a maior comunidade Analytics da Índia')
imprimir resultado 

Saída:
['DO', 'é', 'Analytics', 'do', 'Índia']

Equivalentemente, podemos extrair palavras que começam com constante usando "^" entre colchetes.

Código

resultado=.encontrar tudo(r'b[^ aeiouAEIOU]w + ','AV é a maior comunidade Analytics da Índia')
imprimir resultado

Saída:
[' é', 'maior', 'Analytics', 'comunidade', ' do', ' Índia']

Acima você pode ver que retornou palavras que começam com espaço. Para removê-lo da saída, inclui um espaço entre colchetes[].

Código

resultado=.encontrar tudo(r'b[^ aeiouAEIOU ]w + ','AV é a maior comunidade Analytics da Índia')
imprimir resultado

Saída:
['maior', 'comunidade']


Problema 6: validar um número de telefone (o número de telefone deve ter 10 dígitos e comece com 8 o 9)

Temos uma lista de números de telefone na lista “no” e aqui vamos validar os números de telefone usando

Solução

Código

importar re
li =['9999999999','999999-999','99999x9999']
para val em li:
 se re.match(r '[8-9]{1}[0-9]{9}',val) e len(val) == 10:
     imprimir 'sim'
 outro:
     imprimir 'não'
Saída:
sim
não
não

Problema 7: dividir uma string com muitos delimitadores

Solução

Código

importar linha = 'asdf fjdk;afed,fjek,asdf,foo ' # String tem vários delimitadores (";",","," ").
resultado= .dividir(r '[;,s]', linha)
imprimir resultado

Saída:
['asdf', 'fjdk', 'afed', 'fjek', 'asdf', 'foo']

Também podemos usar o método re.sub () para substituir esses vários delimitadores por um como um espaço "".

Código

importar linha = 'asdf fjdk;afed,fjek,asdf,foo '
resultado= .sub(r '[;,s]','', linha)
imprimir resultado

Saída:
asdf fjdk afed fjek asdf foo

Problema 8: recuperar informações de um arquivo HTML

Quero extrair informações de um arquivo HTML (veja os dados de amostra abaixo). Aqui, precisamos extrair as informações disponíveis entre

e

exceto o primeiro índice numérico. Presumi aqui que o código html abaixo está armazenado em uma string str.

Exemplo de arquivo HTML (str)

<tr align ="Centro"><td>1</td> <td>Noé</td> <td>Emma</td></tr>
<tr align ="Centro"><td>2</td> <td>Liam</td> <td>Olivia</td></tr>
<tr align ="Centro"><td>3</td> <td>Pedreiro</td> <td>Sofia</td></tr>
<tr align ="Centro"><td>4</td> <td>Jacob</td> <td>Isabella</td></tr>
<tr align ="Centro"><td>5</td> <td>William</td> <td>Ava</td></tr>
<tr align ="Centro"><td>6</td> <td>Ethan</td> <td>Meu</td></tr>
<tr align ="Centro"><td>7</td> <td HTML>Michael</td> <td>Emily</td></tr>

Solução:

Código

resultado = re.findall(r '<td>w +</td>s<td>(w +)</td>s<td>(w +)</td>',str)
resultado de impressão
Saída:
[('Noé', 'Emma'), ('Liam', 'Olivia'), ('Pedreiro', 'Sofia'), ('Jacob', 'Isabella'), ('William', 'Ava'), ('Ethan', 'Meu'), ('Michael', 'Emily')]

Você pode ler o arquivo html usando a biblioteca urllib2 (veja o código abaixo).

Código

import urllib2
resposta = urllib2.urlopen('')
html = response.read()

Notas finais

Neste post, discutimos sobre a expressão regular, os métodos e metacaracteres para formar uma expressão regular. Também analisamos vários exemplos para ver seus usos práticos.. Aqui, eu tentei apresentar a você regex e cobrir os métodos mais comuns para resolver problemas máximos de regex.

A postagem foi útil para você? Deixe-nos saber sua opinião sobre este guia na seção de comentários abaixo..

Se você gostou do que acabou de ler e deseja continuar seu aprendizado sobre análise, inscreva-se em nossos e-mails, Siga-nos no Twitter ou como o nosso página do Facebook.

Assine a nossa newsletter

Nós não enviaremos SPAM para você. Nós odiamos isso tanto quanto você.