使用否定预测的多个正则表达式匹配

时间:2016-02-22 18:20:55

标签: python regex

我正在尝试匹配给定字符串中的“查询”一词“此查询管理的查询解析不应突出显示。只有此查询才会突出显示。”

使用以下正则表达式:

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

但是我无法让正则表达式只匹配字符串中的最后一个单词“query”。

此致

阿洛克

1 个答案:

答案 0 :(得分:2)

(query(?!\smanagement)|query(?!\sresolution))正则表达式无法仅匹配一个query并且匹配所有3个query,因为您有两个选择:query不应该跟空格和management以及与query匹配的另一个备选内容,后面没有空格和resolution。您需要使用一个不允许同时resolutionmanagement的前瞻。

您可以使用

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

请参阅demo

前瞻(?!\s(?:management|resolution))将失败query的匹配,后跟1个空格,后跟managementresolution

要仅匹配整个字词,请使用\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())