在模式之前否定几个字符

时间:2015-09-24 14:41:34

标签: regex vbscript

我正在尝试创建一个正则表达式来查找以下字符串:

AGK-XL.

有时在此字符串之前和之后还有其他字符通常无害,除非字符串前面有以下模式:

NOT-

我需要删除/忽略这些情况。 这就是我的尝试:

^[^N][^O][^T][^\-]AGK-XL\.(\s|\W|$)

但是当字符串前面恰好有4个字母时,它似乎只匹配。除NOT-之前AGK-XL.之外的任何其他模式如何表示无害?

感谢任何提示。 编辑:我在VBA atm中使用正则表达式。

1 个答案:

答案 0 :(得分:2)

如果您不能使用花哨的后视镜,当您需要匹配我们不想要的东西时,您可以依赖捕获机制,并且匹配并捕获您想要的内容。请参阅The Best Regex Trick Ever at rexegg.com

但是,在这种情况下,您可以匹配并捕获NOT-AGK-XL.(以便稍后可以使用$1反向引用进行还原),并且只匹配您AGK-XL.的所有其他匹配项将删除。使用交替运算符|来匹配两个备选方案:

(NOT-AGK-XL\.(?!\w))|AGK-XL\.(?!\w)

请参阅demo

注意我将(\s|\W|$)替换为(?!\w),即 - 恕我直言 - 更好的字边界检查。