Просмотр назад регулярных выражений в Python — как использовать

Что такое regex lookbehind регулярных выражений в Python?

В регулярных выражениях lookbehind (смотреть назад) соответствует элементу, если перед ним есть другой конкретный элемент. Просмотр назад имеет следующий синтаксис:

(?<=Y)X

В этом синтаксисе шаблон будет соответствовать X, если перед ним стоит Y.

Например, предположим, что у вас есть следующая строка и вы хотите сопоставить число 500, а не число 1:

'1 phone costs $500'

Для этого вы можете использовать следующее регулярное выражение с таким опережением:

(?<=\$)\d+

В этом шаблоне:

  • (?<=\$) соответствует элементу, если перед ним стоит литеральная строка $. Поскольку $ является специальным символом в регулярном выражении, мы используем символ обратной косой черты \, чтобы экранировать его. В результате механизм регулярных выражений будет рассматривать \$ как обычный символ $.
  • \d+ соответствует одной или нескольким цифрам.

В следующем примере используется регулярное выражение с функцией lookbehind для сопоставления числа, перед которым стоит знак $:

import re

s = '1 phone costs $500'
pattern = '(?<=\$)\d+'

matches = re.finditer(pattern, s)
for match in matches:
    print(match.group())

Выход:

500

Negative lookbehind

negative lookbehind имеет следующий синтаксис:

(?<!Y)X

Этот шаблон соответствует X, если перед ним нет Y.

В следующем примере используется отрицательный просмотр для сопоставления числа, перед которым нет знака $:

import re

s = '1 phone costs $500'
pattern = r'\b(?<!\$)\d+\b'

matches = re.finditer(pattern, s)
for match in matches:
    print(match.group())

Выход:

1

В регулярном выражении:

r'\b(?<!\$)\d+\b'
  • \b соответствует границе слова.
  • (?<!\$) — это отрицательный просмотр назад, который не соответствует знаку $.
  • \d+ соответствует числу, состоящему из одной или нескольких цифр.
Похожие посты
Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *