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, X
mas 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.feet
corresponde à string literalfeet
.
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:
4
Linguagem 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:
- Encontre X
- Teste se Y está imediatamente depois de X e pule se não estiver.
- Teste se Z também está imediatamente depois de Y; pule se não for.
- 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 X
seguido Y
e Z
simultaneamente.
Lookaheads negativos de Regex
Suponha que você queira corresponder apenas o número 1
no 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 X
somente 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:
1
Linguagem de código: texto simples ( texto simples )
Resumo
- Use o lookahead de regex do Python
X(?=Y)
que correspondeX
apenas se for seguido porY
. - Use o lookahead de regex negativo
X(?!Y)
que correspondeX
apenas se não for seguido porY
.