Regex:如何在Visual Studio中检索包含strA但不包含strB的所有行

时间:2009-11-25 06:59:12

标签: visual-studio regex regex-negation

如何在Visual Studio搜索框中检索包含“strA”但不包含“strB ”的文档的所有行?

5 个答案:

答案 0 :(得分:30)

对于Visual Studio 2012(及更新版本):

^(?!.*strB).*strA.*$

说明:

^           # Anchor the search at the start of the line
(?!.*strB)  # Make sure that strB isn't on the current line
.*strA.*    # Match the entire line if it contains strA
$           # Anchor the search to the end of the line

如果您还想删除回车符/换行符以及该行的其余部分,则可能需要在正则表达式的末尾添加(?:\r\n)?

答案 1 :(得分:17)

对于Visual Studio 2010(及以前的版本):

Visual Studio搜索框有自己的,奇怪的正则表达式语法版本。此表达式按要求运行:

^~(.*strB).*strA

^匹配一行的开头。 (通常对于文本编辑器,没有“多行”选项; ^$始终在行边界匹配。)

.匹配除换行符之外的任何字符。 (不常见的是,似乎没有“单线”或“全点”模式,让点匹配换行符。)

~(...)是“防止匹配”构造,相当于(据我所知)其他响应者使用的否定前瞻((?!...))。

答案 2 :(得分:1)

您使用Negative lookarounds但如果您不知道术语的预期位置(甚至是顺序),则表达式非常复杂。 你知道订单或模式吗?

否则我建议你使用另一个工具,它可以通过逐行文件轻松循环(或列表comp)并执行inStr或Contains或其他简单的更快逻辑测试...

答案 3 :(得分:1)

我将假设搜索框实际上接受一般正则表达式。使用否定前瞻:

(?!^.*strB.*$)strA

您需要设置多行选项(行的开头/结尾处^$匹配)。如果无法使用对话框选项进行设置,请尝试:

(?m)(?!^.*strB.*$)strA

这可能是该引擎中的默认模式。

答案 4 :(得分:0)

这适用于Visual Studio 2010:

^。+ [^(STRB)。+(STRA)。+ [^(STRB)。+ $