Отрицательный взгляд в будущее: регулярное выражение: сопоставьте одну из нескольких подстрок вниз по строке - PullRequest
1 голос
/ 12 апреля 2020

Я пытаюсь реализовать отрицательное предвосхищение в регулярном выражении (в Python), чтобы помочь мне определить случаи, когда за конкретным соответствием не следует ни одна из нескольких подстрок в любом месте строки, Я реализую это через Pandas.Series.str.contains(). В качестве упрощенного примера, предположим, что я пытаюсь сопоставить подстроку CAT, если DOG или PIG не появится где-нибудь позже в подстроке:

df = pd.DataFrame({'var':['THE CAT IS MINE','THE CAT AND THE DOG', 'THE CAT AND THE PIG']})

Ожидаемые результаты будут возвращать совпадение только для первый элемент. Следующая ссылка описывает такой сценарий, когда ваши взгляды вперед / назад могут быть обобщены за пределы непосредственного окружения, но только для простых цифр / букв (например, с использованием (?=[^5]*5)). Я не мог обобщить этот совет для моего варианта использования. Любые советы будут с благодарностью.

1 Ответ

3 голосов
/ 12 апреля 2020

Здесь необходимо указать следующее регулярное выражение:

\bCAT\b(?!.*\b(?:DOG|PIG)\b)

Это будет соответствовать слову CAT при условии, что ни DOG, ни PIG не появятся позже в строке.

Python код:

df[df["var"].str.contains(fr'\bCAT\b(?!.*\b(?:DOG|PIG)\b)', regex=True)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...