如何在Visual Studio搜索框中检索包含“strA”但不包含“strB ”的文档的所有行?
答案 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)。+ $