Вы (query(?!\smanagement)|query(?!\sresolution))
регулярное выражение не совпадает только один query
и соответствует всем 3 query
потому, что у вас есть два варианта: query
, которые не должны следовать с пространством и management
и другое альтернативное соответствие query
, за которым не следует пробел и resolution
. Вам нужно использовать один lookahead, который запретит и resolution
И management
.
Вы можете использовать
query(?!\s(?:management|resolution))
См demo
В предпросмотре (?!\s(?:management|resolution))
провалит матч query
, что следует с 1 пробелом следует с обеими management
или resolution
.
Чтобы соответствовать только целые слова, используйте \b
:
\bquery\b(?!\s\b(?:management|resolution)\b)
Python demo показывает, как вы можете получить первый матч в строке с этим регулярным выражением с re.search
:
import re
p = re.compile(r'query(?!\s*(?:management|resolution))')
test_str = "The query resolution with this query management should not get highlighted. Only this query should get highlighted.The query resolution with this query management should not get highlighted. Only this query should get highlighted."
m = p.search(test_str)
if m:
print(m.group())
Спасибо Wiktor, что отлично работает ! –
Спасибо Wiktor. У меня был другой вопрос. Как получить только первое совпадение слова «запрос», если оно встречается несколько раз в предложении, используя предоставленный вами код? Я знаю, что нам нужно использовать «неживого» оператора «?», Но не уверен, куда его поместить. –
Использование кода. Для чего это язык? –