2016-02-22 69 views
1

我想单词“查询”,在给定的字符串匹配“的查询解析此查询的管理不应该得到强调,只有这个查询应该得到强调。”多个正则表达式匹配使用负向前查找

使用以下正则表达式:

(query(?!\smanagement)|query(?!\sresolution)) 

但我无法得到正则表达式只匹配字符串中最后一个单词“查询”。

问候,

阿洛克

回答

2

(query(?!\smanagement)|query(?!\sresolution))正则表达式不能只有一个query匹配,并且所有的3只query因为你有两个选择匹配:query不应该遵循的空间和management和另一替代方案匹配query,没有跟着一个空格,resolution。您需要使用一个前视图,这将禁止resolutionmanagement

您可以使用

query(?!\s(?:management|resolution)) 

demo

先行(?!\s(?:management|resolution))将失败与1个空白,随后用要么managementresolution之后的query比赛。

要只匹配整个单词,使用\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()) 
+0

感谢Wiktor的,完美的作品! –

+0

谢谢Wiktor。我有另一个问题。如果使用您提供的代码在句子中多次出现“查询”这个单词,我该如何获得第一个匹配的单词?我知道我们需要使用“非贪婪”运算符“?”,但不知道该把它放在哪里。 –

+0

使用代码。它的语言是什么? –