Resumo : neste tutorial, você aprenderá sobre lookbehind de regex Python e lookbehind negativo.
Introdução ao lookbehind de regex do Python
Em expressões regulares , o lookbehind corresponde a um elemento se houver outro elemento específico antes dele. O lookbehind tem a seguinte sintaxe:
(?<=Y)X
Nesta sintaxe, o padrão corresponderá X
se houver Y
antes dele.
Por exemplo, suponha que você tenha a seguinte string e queira corresponder o número 500
e não o número 1
:
'1 phone costs $500'
Linguagem de código: JavaScript ( javascript )
Para fazer isso, você pode usar a seguinte expressão regular com uma previsão como esta:
(?<=\$)\d+
Neste padrão:
(?<=\$)
corresponde a um elemento se houver uma string literal$
antes dele. Como the$
é um caractere especial na regex, usamos a barra invertida\
para escapar dele. Como resultado, o mecanismo regex tratará\$
como um caractere regular$
.\d+
corresponde a um ou mais dígitos.
O exemplo a seguir usa uma expressão regular com um lookbehind para corresponder a um número que tem o $
sinal antes dele:
import re
s = '1 phone costs $500'
pattern = '(?<=\$)\d+'
matches = re.finditer(pattern, s)
for match in matches:
print(match.group())
Linguagem de código: JavaScript ( javascript )
Saída:
500
Olhar negativo para trás
O lookbehind negativo tem a seguinte sintaxe:
(?<!Y)X
Este padrão corresponde X
se não Y
houver antes dele.
O exemplo a seguir usa um lookbehind negativo para corresponder a um número que não tem o $
sinal antes dele:
import re
s = '1 phone costs $500'
pattern = r'\b(?<!\$)\d+\b'
matches = re.finditer(pattern, s)
for match in matches:
print(match.group())
Linguagem de código: JavaScript ( javascript )
Saída:
1
Na expressão regular:
r'\b(?<!\$)\d+\b'
Linguagem de código: JavaScript ( javascript )
- Corresponde ao
\b
limite da palavra. - O
(?<!\$)
é um lookbehind negativo que não corresponde ao$
sinal. - Corresponde a
\d+
um número com um ou mais dígitos.
Resumo
- Um lookbehind
(?<!Y)X
correspondeX
apenas se houver um elementoY
antes dele. - Um lookbehind negativo
(?<!Y)X
correspondeX
apenas se não houver nenhum elementoY
antes dele.