【发布时间】:2016-08-27 20:00:04
【问题描述】:
我有以下 .NET 正则表达式:
(?<!["".])+?\b(AND|OR)\b\)?\s?(?=\1+|\1?$)\1?(?![.""])
它非常适合查找不在两个单词之间的单词 AND 或 OR,以便我可以逃避它们。但是,我正在努力让正则表达式排除运算符包含在引号内的匹配项。
因此,例如,以下内容不应匹配,尽管如果它们不在引号中,通常它们会匹配。
"MARS AND VENUS AND" - would match on the last AND
"MARS AND AND AND AND AND OR"- would match on all AND words and OR
【问题讨论】:
-
没有真正好的方法可以做到这一点。您唯一能做的就是匹配引号和捕获组中不是 AND OR NOT 的内容(对于替换有用),然后匹配 AND OR NOT。这是我在 .net 中知道的唯一避免某些事情的方法。其他使用lookbehinds的方法只是浪费时间而且是错误的。您还可以使用拆分方法(在引号之间拆分内容),然后检查每个部分的 AND OR NOT。
-
@CasimiretHippolyte 非常感谢,终于有人把我从精神错乱中带回来了,我花了三天多的时间试图弄清楚,难怪我感到如此泄气!谢谢你的建议。我很惊讶我认为正则表达式可以处理这样的事情。
-
我向您发送我对您的具体案例的意见。由于您是初学者,请注意仔细测试人们建议您的任何解决方案(尝试最坏的边缘情况),并花时间充分理解它们。
-
@CasimiretHippolyte 感谢您的所有建议。 :-)