Visualização antecipada do Python Regex

Resumo : neste tutorial, você aprenderá sobre o lookahead de regex do Python e o lookahead negativo.

Introdução ao lookahead de regex do Python

Às vezes, você deseja corresponder X, mas apenas se for seguido por Y. Nesse caso, você pode usar o lookahead em expressões regulares .

A sintaxe do lookahead é a seguinte:

X(?=Y)Linguagem de código:  Python  ( python )

Esta sintaxe significa procurar, Xmas corresponde apenas se for seguido por Y.

Por exemplo, suponha que você tenha a seguinte string:

'1 Python is about 4 feet long'Linguagem de código:  Python  ( python )

E você deseja corresponder o número ( 4) que é seguido por um espaço e a string literal feet, não o número 1. Nesse caso, você pode usar o seguinte padrão que contém uma antecipação:

\d+(?=\s*feet)Linguagem de código:  Python  ( python )

Neste padrão:

  • \d+é a combinação do conjunto de caracteres de dígitos com o + quantificador que corresponde a um ou mais dígitos.
  • ?=é a sintaxe antecipada
  • \s*é a combinação do conjunto de caracteres de espaço em branco e *do quantificador que corresponde a zero ou mais espaços em branco.
  • feetcorresponde à string literal feet.

O código a seguir usa o padrão acima para corresponder ao número seguido por zero ou mais espaços e a string literal feet:

import re

s = '1 Python is about 4 feet long'
pattern = '\d+(?=\s*feet)'

matches = re.finditer(pattern,s)
for match in matches:
    print(match.group())Linguagem de código:  Python  ( python )

Saída:

4Linguagem de código:  PHP  ( php )

Regex múltiplos lookaheads

Regex permite que você tenha vários lookaheads com a seguinte sintaxe:

 X(?=Y)(?=Z)Linguagem de código:  Python  ( python )

Nesta sintaxe, o mecanismo regex executará as seguintes etapas:

  1. Encontre X
  2. Teste se Y está imediatamente depois de X e pule se não estiver.
  3. Teste se Z também está imediatamente depois de Y; pule se não for.
  4. Se ambos os testes forem aprovados, o X corresponde; caso contrário, procure a próxima correspondência.

Portanto, o X(?=Y)(?=Z)padrão corresponde Xseguido Ye Zsimultaneamente.

Lookaheads negativos de Regex

Suponha que você queira corresponder apenas o número 1no texto a seguir, mas não o número 4:

'1 Python is about 4 feet long'Linguagem de código:  Python  ( python )

Para fazer isso, você pode usar a sintaxe de lookahead negativo:

X(?!Y)Linguagem de código:  Python  ( python )

A X(?!Y)correspondência Xsomente se não for seguida por Y. É o \d+não seguido pela string literal feet:

import re

s = '1 Python is about 4 feet long'
pattern = '\d+(?!\s*feet)'

matches = re.finditer(pattern,s)
for match in matches:
    print(match.group())Linguagem de código:  Python  ( python )

Saída:

1Linguagem de código:  texto simples  ( texto simples )

Resumo

  • Use o lookahead de regex do Python X(?=Y)que corresponde Xapenas se for seguido por Y.
  • Use o lookahead de regex negativo X(?!Y)que corresponde Xapenas se não for seguido por Y.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *