Похоже, вы можете использовать MAN(?!.*PN)
. Это соответствует MAN
и использует отрицательный прогноз, чтобы убедиться, что за ним не следует PN
(, как видно на rubular.com ).
Учитывая MAN_PN_MAN_BLEH
, вышеприведенный шаблон найдет вторую MAN
, поскольку за ней не следует PN
. Если вы хотите проверить всю строку и убедиться, что нет MAN.*PN
, то вы можете использовать что-то вроде ^(?!.*MAN.*PN).*MAN.*$
(, как видно на rubular.com ).
Ссылки
Смежные вопросы
Параметр без регулярных выражений
Если строки должны совпадать буквально, вы также можете проверить индексы вхождений подстроки.
В Python find
и rfind
возвращают самый низкий и самый высокий индекс вхождений подстроки соответственно.
Таким образом, чтобы убедиться, что string1
встречается, но никогда не следует string2
, и оба возвращают -1
, если строка не найдена, так что похоже, что вы можете просто проверить это условие:
string.rfind(s, string2) < string.find(s, string1)
Сравнивает крайнее левое вхождение string1
и крайнее правое вхождение string2
.
- Если ничего не происходит, оба значения равны
-1
, а результат равен false
- Если
string1
происходит, но string2
нет, то результат равен true
, как и ожидалось
- Если происходит и то и другое, то самый правый
string2
должен находиться слева от самого левого string1
- То есть, за
string1
никогда не следует string2
API ссылки