Documentação para o módulo Re para Python 3 em . Módulo Re para expressões regulares

As expressões regulares são um componente muito popular de quase todas as linguagens de programação. Eles ajudam você a acessar rapidamente as informações de que precisa. Em particular, eles são usados ​​quando é necessário processar texto. Python vem com um módulo especial por padrão. re, que é responsável por trabalhar com expressões regulares.

Hoje falaremos detalhadamente sobre o que é em geral, como trabalhar com eles e como o módulo re vai ajudar.

Expressões regulares: uma introdução

Quais são os usos das expressões regulares? Quase tudo. Por exemplo, estes:

  1. Aplicativos da Web que exigem validação de texto. Um exemplo típico são os clientes de correio online.
  2. Quaisquer outros projetos relacionados a textos, bancos de dados e assim por diante.

Antes de começarmos a analisar a sintaxe, devemos entender com mais detalhes os princípios básicos do funcionamento da biblioteca re e, em geral, o que é geralmente bom nisso. Também daremos exemplos da prática real, onde descreveremos o mecanismo de seu uso. Você pode criar esse modelo, adequado para realizar uma ampla variedade de operações com texto.

O que é um modelo na biblioteca Re?

Com ele, você pode pesquisar informações de vários tipos, obter informações correspondentes a elas, de modo a tornar outras funções mais adaptáveis. E, claro, para processar esses dados.

Por exemplo, pegue o seguinte modelo: s+. Significa qualquer caractere de espaço. Se você adicionar um sinal de mais a ele, isso significa que o padrão inclui mais de um espaço. Ele pode até corresponder a caracteres de tabulação que são chamados com t+.

Antes de usá-los, você precisa importar a biblioteca Re. Depois disso, usamos um comando especial para compilar o modelo. Isso é feito em duas etapas.

>>> importar re

>>> regex = re.compile('s+')

Especificamente, esse código realiza a operação de compilação de um modelo que pode ser usado. por exemplo, para procurar espaços (um ou mais).

Obtendo informações separadas de diferentes strings usando expressões regulares

Suponha que temos uma variável contendo as seguintes informações.

>>> texto = “””100 INF Informática

213 MAT Matemática  

156 ING Inglês»»»

Ele contém três cursos de treinamento. Cada um deles consiste em três partes – número, código e nome. Vemos que o intervalo entre essas palavras é diferente. O que fazer para quebrar esta linha em números e palavras separados? Existem dois métodos para atingir esse objetivo:

  1. chamar uma função re.dividir.
  2. aplicar função divisão para regex.

Aqui está um exemplo de como usar a sintaxe de cada um dos métodos para nossa variável.

>>> re.split('s+', texto)  

# ou

>>> regex.split(texto)

Saída: ['100', 'INF', 'Ciência da Computação', '213', 'MAT', 'Math', '156', 'ENG', 'English']

Em geral, ambos os métodos podem ser usados. Mas na verdade é muito mais fácil usar uma expressão regular em vez de usar a função várias vezes. re.dividir.

Encontrar correspondências com três funções

Digamos que precisamos extrair apenas números de uma string. O que precisa ser feito para isso?

re.encontrar()

Aqui está um caso de uso para a função encontrar tudo(), que, junto com expressões regulares, permite extrair ocorrências de um ou mais números de uma variável de texto.

>>> imprimir(texto)  

100 INF Informática

213 MAT Matemática  

156 ING Inglês

>>> regex_num = re.compile('d+')  

>>> regex_num.findall(texto)  

['100', '213', '156']

Juntamente com o símbolo d, usamos um modelo que indica absolutamente qualquer valor numérico localizado em uma variável ou texto. E como adicionamos um + lá, isso significa que pelo menos um número deve estar presente. 

Você também pode usar o sinal * para especificar que a presença de um dígito não é necessária para que uma correspondência seja encontrada.

Mas no nosso caso, como usamos +, extraímos com encontrar tudo() 1 ou mais designações digitais de cursos do texto. Assim, no nosso caso, as expressões regulares atuam como configurações para a função.

re.pesquisar() vs revanche()

Como você pode adivinhar pelo nome das funções, a primeira procura uma correspondência no texto. Pergunta: Qual é a diferença entre encontrar tudo? O ponto é que ele retorna um objeto específico que corresponde ao padrão, e não a sequência inteira de resultados encontrados na forma de uma lista, como a função anterior.

Por sua vez, a função re.match faz o mesmo. Apenas a sintaxe é diferente. O modelo deve ser colocado no início. 

Vamos dar um exemplo que demonstra isso.

>>> # cria uma variável com texto

>>> text2 = «»»INF Informática

213 MAT Matemática 156″»»  

>>> # compila regex e procura padrões

>>> regex_num = re.compile('d+')  

>>> s = regex_num.search(text2)  

>>> print('Primeiro índice: ', s.start())  

>>> print('Último índice: ', s.end())  

>>> print(text2[s.start():s.end()]) 

Primeiro índice: 17 

Último índice: 20

213

Se você deseja obter um resultado semelhante de uma maneira diferente, pode usar a função grupo().

Substituindo parte do texto pela biblioteca Re

Para substituir o texto, use a função re.sub(). Suponha que nossa lista de cursos tenha mudado um pouco. Vemos que após cada valor digital temos uma aba. Nossa tarefa é combinar toda essa sequência em uma linha. Para fazer isso, precisamos substituir a expressão s+ passar 

O texto original era:

#cria uma variável com texto

>>> texto = “””100 INF t Informática

213 MAT t Matemática  

156 ENG t Inglês»»»  

>>> imprimir(texto)  

100 INFO Ciência da computação

213 MAT Matemática  

156 ING Inglês

Para realizar a operação desejada, usamos as seguintes linhas de código.

# substitui um ou mais espaços por 1

>>> regex = re.compile('s+')  

>>> print(regex.sub(' ', texto))  

Como resultado, temos uma linha. 

101 COM Computadores 205 MAT Matemática 189 ENG Inglês

Agora considere outro problema. Não nos deparamos com a tarefa de colocar espaços. É muito mais importante para nós que todos os nomes de cursos comecem em uma nova linha. Para fazer isso, é usada outra expressão que adiciona uma nova linha à exceção. Que tipo de expressão é essa?

Library Re suporta um recurso como correspondência negativa. Difere do direto porque contém um ponto de exclamação antes da barra. Ou seja, se precisarmos pular o caractere de nova linha, precisamos escrever !n em vez de n.

Obtemos o seguinte código.

# remove todos os espaços, exceto nova linha  

>>> regex = re.compile('((?!n)s+)')  

>>> print(regex.sub(' ', texto))  

100 INF Informática

213 MAT Matemática  

156 ING Inglês

O que são grupos de expressões regulares?

Com a ajuda de grupos de expressões regulares, podemos obter os objetos desejados na forma de elementos separados, e não em uma linha. 

Suponha que precisamos obter o número, código e nome do curso não em uma linha, mas como elementos separados. Para concluir a tarefa, você precisará escrever um grande número de linhas de código desnecessárias. 

Na verdade, a tarefa pode ser bastante simplificada. Você pode compilar o modelo para todas as entradas e apenas especificar os dados que precisa obter dos colchetes.

Haverá um número muito pequeno de linhas. 

# criar grupos de modelos de texto do curso e extraí-los

>>> course_pattern = '([0-9]+)s*([A-ZY]{3})s*([a-zA-ZoY]{4,})'  

>>> re.findall(course_pattern, text)  

[('100', 'INF', 'Ciência da Computação'), ('213', 'MAT', 'Math'), ('156', 'ENG', 'English')]

O conceito de correspondência “gananciosa”

Por padrão, as expressões regulares são programadas para extrair a quantidade máxima de dados correspondentes. E mesmo que você precise de muito menos.

Vejamos um exemplo de código HTML onde precisamos obter a tag.

>>> text = “Exemplo de correspondência de expressão regular gananciosa”  

>>> re.findall('', texto)  

['Exemplo de correspondência de expressão regular gananciosa']

Em vez de extrair apenas uma tag, o Python obteve a string inteira. É por isso que é chamado de ganancioso.

E o que fazer para pegar apenas a tag? Nesse caso, você precisa usar a correspondência preguiçosa. Para especificar tal expressão, um ponto de interrogação é adicionado ao final do padrão.

Você obterá o seguinte código e a saída do interpretador.

>>> re.findall('', texto)  

[”, ”]

Se for necessário obter apenas a primeira ocorrência encontrada, o método será usado procurar ().

re.search('', texto).group()  

"

Então, apenas a tag de abertura será encontrada.

Modelos de expressão populares

Aqui está uma tabela contendo os padrões de expressão regular mais usados.

Documentação para o módulo Re para Python 3 em . Módulo Re para expressões regulares

Conclusão

Consideramos apenas os métodos mais básicos para trabalhar com expressões regulares. De qualquer forma, você viu como eles são importantes. E aqui não faz diferença se é necessário analisar todo o texto ou seus fragmentos individuais, se é necessário analisar uma postagem em uma rede social ou coletar dados para processá-lo posteriormente. As expressões regulares são um auxiliar confiável neste assunto.

Eles permitem que você execute tarefas como:

  1. Especificar o formato dos dados, como endereço de e-mail ou número de telefone.
  2. Pegando uma string e dividindo-a em várias strings menores.
  3. Realize várias operações com texto, como pesquisar, extrair as informações necessárias ou substituir parte dos caracteres.

As expressões regulares também permitem que você execute operações não triviais. À primeira vista, dominar esta ciência não é fácil. Mas, na prática, tudo é padronizado, então basta descobrir uma vez, após o que essa ferramenta pode ser usada não apenas em Python, mas também em qualquer outra linguagem de programação. Até o Excel usa expressões regulares para automatizar o processamento de dados. Portanto, é um pecado não usar essa ferramenta.

Deixe um comentário