Python Regex Lookbehind

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á Xse houver Yantes dele.

Por exemplo, suponha que você tenha a seguinte string e queira corresponder o número 500e 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 Xse 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 \blimite 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)Xcorresponde Xapenas se houver um elemento Yantes dele.
  • Um lookbehind negativo (?<!Y)Xcorresponde Xapenas se não houver nenhum elemento Yantes dele.

Deixe um comentário

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