【发布时间】:2021-01-23 09:13:26
【问题描述】:
我已经使用了一点正则表达式,但现在我偶然发现了一种情况,我真的不知道该怎么做,而且我阅读的所有在线教程都没有涵盖我的情况。 这个问题看起来很容易解决,而且可能很容易解决,但我还没有找到解决方案。
我需要解析一个字符串,它由短字符串与布尔运算符 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。
【问题讨论】:
-
我会说,分析它的正确方法是捕获整个not not qqqq,否则你在某处悬空not
-
请注意,您可能拥有 aaa xxx 而不是(yyy 或 zzz)
-
是的,我知道,我想一个一个地捕捉术语并用占位符替换它们,直到我只剩下简单的术语。所以,当字符串是“not not qqqq”时,我会先捕获“not qqqq”并用占位符替换它,给我“not
”,然后下一个匹配会给我“not "。