正则表达式否定问题

时间:2009-12-07 22:21:27

标签: c# regex grep regex-negation

是否有人知道如何编写正则表达式(用于某些类似grep的工具),它会搜索单词'vat'但排除单词'pri vat e'。我已经接管了一个项目,其中有数百个增值税参考(一些是硬编码的,一些没有),并且随着英国的增值税税率在1月1日发生变化,我需要以正确的费率更新项目源文件。当我在Visual Studio中对“vat”一词进行全局搜索时,它还返回包含私有void定义的行。

除此之外,我需要搜索'15'(当前增值税率),但我想排除任何在'15'之前或之后有任何数字的行。例如,0.15或15或15%为真,015或150或15a为假。

正如您可以想象的那样,手动操作并非易事,因此非常感谢任何帮助。

谢谢,

4 个答案:

答案 0 :(得分:5)

/\bVAT\b/

/\b(0\.)?15%?\b/

最后一个允许“0.15%”这样的东西,但那些应该足够少,以便以后过滤掉。正则表达式不是最好的工具,那么像“10 + 5”这样的表达式呢?但如果它满足您的需求,它至少是易于使用的!

答案 1 :(得分:1)

是的,你可以使用一种称为负面'lookbehind'和'lookahead'的技术,它将匹配一些其他东西没有的东西。

以下是概述:

http://www.regular-expressions.info/lookaround.html

此外,杰夫阿特伍德有一篇关于它的博客文章可能有一些小的价值:

http://www.codinghorror.com/blog/archives/000425.html

答案 2 :(得分:1)

使用Visual Studio(正如我之前所做的那样)你可以使用:

对于增值税

〜(pri)vat~(e)(这也将排除'vate'所以只要取下〜(e),如果需要的话)

对于15

[^ 0-9A-Z] 15 [^ 0-9A-Z]

VS用于查找和替换的正则表达式语法与标准正则表达式不同,不确定为什么MS采用这种方式,但确实如此。

答案 3 :(得分:0)

你不能搜索“增值税”(空间增值税空间)吗?