Expressões regulares em Python [com exemplos]: como implementar?

Publicados: 2021-01-29

Ao processar dados brutos de qualquer fonte, é importante extrair as informações corretas para que insights significativos possam ser obtidos a partir dos dados. Às vezes, torna-se difícil retirar o padrão específico dos dados, especialmente no caso de dados textuais.

Os dados textuais consistem em parágrafos de informações coletadas por meio de formulários de pesquisa, sites de sucata e outras fontes. O Channing de diferentes acessadores de string com funções pandas ou outras funções personalizadas pode fazer o trabalho, mas e se um padrão mais específico precisar ser obtido? Expressões regulares fazem esse trabalho com facilidade.

Índice

O que é uma expressão regular (RegEx)?

Uma expressão regular é uma representação de um conjunto de caracteres para strings. Ele apresenta uma fórmula generalizada para um padrão específico nas strings que ajuda a segregar as informações corretas do conjunto de dados. A expressão geralmente consiste em símbolos ou caracteres que ajudam na formação da regra, mas, à primeira vista, pode parecer estranho e difícil de entender. Esses símbolos têm significados associados que são descritos aqui.

Aprenda cursos de ciência de dados das melhores universidades do mundo. Ganhe Programas PG Executivos, Programas de Certificado Avançado ou Programas de Mestrado para acelerar sua carreira.

Meta-caracteres em RegEx

  1. '.': é um curinga, corresponde a um único caractere (qualquer caractere, mas apenas uma vez)
  2. ^: denota o início da string
  3. $: denota o final da string
  4. [ ]: corresponde a um dos conjuntos de caracteres dentro de [ ]
  5. [az]: corresponde a um intervalo de caracteres a,b,…,z
  6. [^abc] : corresponde a um caractere que não seja a,b ou c.
  7. a|b: corresponde a a ou b, onde a e b são strings
  8. () : fornece escopo para operadores
  9. \ : habilita o escape para caracteres especiais (\t, \n, \b, \.)
  10. \b: corresponde ao limite da palavra
  11. \d : qualquer dígito, equivalente a [0-9]
  12. \D: qualquer não dígito, equivalente a [^0-9]
  13. \s : qualquer espaço em branco, equivalente a [ \t\n\r\f\v]
  14. \S : qualquer espaço não branco, equivalente a [^\t\n\r\f\v]
  15. \w : qualquer alfanumérico, equivalente a [a-zA-Z0-9_]
  16. \W : qualquer não alfanumérico, equivalente a [^a-zA-Z0-9_]
  17. '*': corresponde a zero ou mais ocorrências
  18. '+': corresponde a uma ou mais ocorrências
  19. '?': corresponde a zero ou uma ocorrência
  20. {n}: exatamente n repetições, n>=0
  21. {n,}: pelo menos n repetições
  22. {,n}: no máximo n repetições
  23. {m,n}: no mínimo m repetições e no máximo n repetições

Exemplos para entender a solução alternativa

Agora que você conhece os caracteres que compõem um RegEx, vamos ver como isso funciona:

1. Filtragem de e-mail:

Suponha que você queira filtrar todos os IDs de e-mail de um parágrafo longo. O formato geral de um e-mail é:

username@domain_name. <top_level_domain>

O nome de usuário pode ser alfanumérico e, portanto, podemos usar \w para denotá-los, mas existe a possibilidade de o usuário criar uma conta como firstName.surname. Para resolver isso, vamos escapar do ponto e criar um conjunto de caracteres. Em seguida, domain_name deve ser apenas alfabético e, portanto, A-Za-z denotará isso. O domínio de nível superior geralmente é .com, .in, .org, mas dependendo do caso de uso, você pode escolher todo o intervalo alfabético ou filtrar domínios específicos.

A expressão regular de this ficará assim:

^([a-zA-Z0-9_.]+)@([a-zA-Z0-9-]+)\.([a-zA-Z]{2,4})$

Aqui, o início e o fim do padrão também são declarados, assim como o domínio de nível superior pode conter apenas 2-4 caracteres. A expressão inteira tem 3 grupos.

2. Filtragem de Datas:

As informações textuais que você está extraindo podem conter as datas e nenhuma coluna separada é disponibilizada para você. As datas são um fator essencial que auxilia na filtragem de dados ou análise de séries temporais. Uma data específica assume o formato de data/mês/ano, onde data e mês podem ser trocados.

Além disso, os meses podem ser numéricos, bem como em forma de alfabeto e, em alfabetos, abreviações ou nomes completos. Depende principalmente de quantos casos estão presentes em nossos dados e só pode ser alcançado por acerto e julgamento.

Um RegEx simples que cobre uma variedade de datas é mostrado abaixo:

^(\d{1,2})[/-](\d{1,2})[/-](\d{2,4})$

Esse padrão captura o formato de data com um hífen ou uma barra. A data e o mês estão limitados a um ou dois dígitos e o ano a quatro0 dígitos. As respectivas entidades são capturadas como grupos que são opcionais neste caso.

Leia também: Ideias e tópicos do projeto Python

Como implementá-lo em Python?

As expressões regulares que acabamos de construir estão satisfazendo os respectivos critérios que assumimos e agora é hora de implementá-las no código Python. Python tem um módulo embutido chamado re module que implementa o funcionamento dessas expressões. Simplesmente,

importar re

padrão = '^(\d{1,2})[/-](\d{1,2})[/-](\d{2,4})$'

O módulo Re oferece uma ampla gama de funções e todas elas têm diferentes casos de uso. Vejamos algumas das funções importantes:

  1. re.findall(): Esta função retorna a lista de todas as correspondências na string de teste com base no padrão passado. Considere este exemplo:

string = '25-12-1999 texto aleatório aqui 25/12/1999'

print(re.findall(padrão, string))

Ele retornará apenas as datas da string em uma lista.

  1. re.sub(): Sub nesta função significa substituição e faz a mesma coisa. Substitui as partidas pelo valor de reposição fornecido. A função recebe o padrão, a string, o valor de substituição e o parâmetro opcional da contagem. O parâmetro count controla quantas ocorrências você deseja substituir. Por padrão, ele substitui todos eles e retorna a nova string.
  2. re.split(): Ele divide a string nos sites correspondentes e retorna as partes como strings separadas em uma lista.
  3. re.search(): Esta função retorna o objeto de correspondência que contém a correspondência encontrada na string junto com todos os grupos capturados. Pode ser útil quando você deseja armazenar esses grupos como colunas separadas.

Para realizar isso:

match = re.search(padrão, string)

match.group(1)

Group(0) retorna a correspondência inteira e os próximos números correspondentes denotam outros grupos.

Checkout: Salário de Desenvolvedor Python na Índia

Conclusão

As expressões regulares são uma maneira poderosa de capturar padrões em dados textuais. Pode exigir um pouco de esforço extra para manter o comando dos vários caracteres, mas simplifica o processo de extração de dados em casos de uso complexos.

Dê alguns exemplos de Expressões Regulares em Python.

Os exemplos a seguir ilustram o funcionamento ou expressões regulares em Python:
uma. Filtragem de e-mail
As expressões regulares podem ser usadas com eficiência para filtrar e-mails. A sintaxe regular para filtragem de e-mail é - ^((a-zA-Z0-9_.)+)@((a-zA-Z0-9-)+).((a-zA-Z){2,4} )$
Esta expressão é dividida em três grupos e aborda muitos casos, incluindo - quando o nome de usuário é alfanumérico e quando possui um ponto, por exemplo, “first.last@”. Essa expressão será usada para domínios principais que contenham de 2 a 4 caracteres.
b. Filtragem de datas
As datas podem ser um fator crucial ao lidar com a filtragem de dados. Os dados textuais com os quais você está lidando geralmente contêm datas. A expressão regular ou RegEx que extrai os dados de um texto normal é - ^(d{1,2})(/-)(d{1,2})(/-)(d{2,4})$
A data e o mês podem ter até 2 dígitos, enquanto o mês pode ter até 4 dígitos.

Quais são as funções envolvidas na implementação de expressões regulares em Python?

As seguintes funções estão envolvidas na implementação de expressões regulares em Python:
1. re.findall() - Esta função aceita um padrão que deve ser combinado com a string de texto. Ele retorna as strings que são uma correspondência.
2. re.sub() - Sub em “re.sub” significa “substituição”. Este método executa exatamente a mesma função que a função “re.findall()”.
3. re.split() - Separa as strings ao redor do separador que deve ser passado para ele como parâmetro. O separador pode ser qualquer coisa.
4. re.search() - Esta função retorna a correspondência encontrada na string junto com outros grupos de strings que ela capturou.

Quais são algumas sequências especiais usadas em expressões regulares?

A seguir estão algumas das sequências especiais usadas em expressões regulares:
1. R: Verifique se a string começa com o caractere fornecido.
2. (Barra) b: Verifica se a string começa ou termina com o caractere fornecido. (string)/b verifica o início enquanto (barra invertida) b (string) verifica o final.
3. B: É exatamente o oposto do b. Verifica se a string não inicia com o caractere fornecido.
4. d: Verifica os valores numéricos na string.
5. D: Verifica qualquer valor ou caractere não numérico.
6. s: Verifica se há algum caractere de espaço em branco.
7. S: Verifica qualquer caractere que não seja espaço em branco.
8. w: Verifica qualquer caractere alfanumérico.
9. W: Verifica qualquer caractere não alfanumérico.