首页 > 解决方案 > 如何在正则表达式中否定整个单词

问题描述

我已经使用了一点正则表达式,但现在我偶然发现了一种情况,我真的不知道该怎么做,而且我阅读的所有在线教程都没有涵盖我的情况。这个问题看起来很容易解决,而且可能很容易解决,但我还没有找到解决方案。

我需要解析一个字符串,该字符串由短字符串与布尔运算符 AND、OR 和 NOT 组合而成,允许使用括号,空格无关紧要,不区分大小写。

例如

xxxx AND  (yyyy or zzzz) and not  qqqq

现在我想找到所有前面有 NOT 的字符串。为此,我创建了这个正则表达式模式

"NOT\s+[\w]+"

(文字 NOT 后跟至少一个空格,后跟至少一个字母/数字。)

在上面的例子中,这会给我“不是 qqqq”。

但是,如果用户碰巧写了

xxxx AND  (yyyy or zzzz) and not not  qqqq

这是一个有效的字符串,那么我的模式会给我“not not”而不是“not qqqq”。

所以我需要一个正则表达式模式,它会给我“字面词不后跟空格,后跟任何字符串,但不跟空格(或字符串结尾)”。

我知道如何否定单个字符,但我没有找到任何否定整个单词的工作示例,至少当我在 regexstorm.net 中测试它时没有

我使用.NET。

标签: .netregex

解决方案


使用不区分大小写的匹配,您可以使用

\bNOT\s+(?!NOT\b)\w+
  • \bNOT\s+一个单词边界,匹配 NOT 和 1+ 个空格字符
  • (?!NOT\b)Negativelookahead,断言NOT不在右边
  • \w+匹配 1+ 个单词字符

正则表达式演示


推荐阅读