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.
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 “réO que ajuda com expressões regulares. Então você precisa importar a biblioteca ré 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 “ré”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:
- revanche()
- investigar()
- re.findall ()
- re.split ()
- re.sub ()
- 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 = ré.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 = ré.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=ré.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=ré.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=ré.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=ré.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 ré padronizar=ré.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 ré resultado=ré.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=ré.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=ré.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=ré.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=ré.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=ré.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=ré.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=ré.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=ré.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=ré.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=ré.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=ré.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=ré.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=ré.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 ré linha = 'asdf fjdk;afed,fjek,asdf,foo ' # String tem vários delimitadores (";",","," "). resultado= ré.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 ré linha = 'asdf fjdk;afed,fjek,asdf,foo ' resultado= ré.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
excepto el primer índiceo "Índice" É uma ferramenta fundamental em livros e documentos, que permite localizar rapidamente as informações desejadas. Geralmente, é apresentado no início de um trabalho e organiza os conteúdos de forma hierárquica, incluindo capítulos e seções. Sua correta preparação facilita a navegação e melhora a compreensão do material, tornando-se um recurso essencial para estudantes e profissionais de várias áreas.... 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..