Просмотр назад регулярных выражений в 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+ соответствует числу, состоящему из одной или нескольких цифр.