如何在Visual Studio 2012、2013、2015和VS Code中使用正则表达式查找和替换捕获组


254

我意识到对此有很多疑问,但是我发现没有一个具体提及他们所指的VS版本。由于缺少重要信息,我仍然无法成功使用找到的答案。最常见的是

  • 用{}括起来,用\ 1,\ 2,\ n显示捕获

但是,这似乎是在Visual Studio中执行正则表达式查找和替换的旧方法,并且在VS 2012中不起作用。


1
在帮助中不太难找到:在“搜索/替换”对话框中,F1;在查找和替换文本的早期,有一个链接指向在VS中使用正则表达式 ; 那里的第二条技巧告诉你正则表达式的替换 ; 在那里,它为您提供了基础知识,并说了在替换编号组替换命名组下有更多详细信息。
PJTraill 2015年

2
@PJTraill很高兴得知他们使在2013年至2015年之间的某个时间更容易回答其2012年版本的问题。但是,通过投票,我认为很明显,在帮助中仍然不是“不太难”。IMO:如果要在堆栈溢出的文章上进行搜索和投票比在不查找帮助的情况下使用查找,替换,捕获要容易得多,那就比应该做的要难得多。
SgtPooki

关于MSVS 2012/3,令我感到困扰的一件事是两种不同的“搜索/替换”对话框,尤其是较小的(Ctrl-H)对话框,我在其中不小心保持(击键可能意味着其他地方的其他含义)改变了搜索范围。但是我要说明的是,较大的(Ctrl-Shift-H)对话框在“查找”和“替换”字段之后具有按钮,这些按钮为您提供了更重要的可能性列表,包括您要查找的内容,因此您无需需要帮忙!我猜想很多人要么没有发现按钮,要么没有进入Ctrl-H对话框,而看不到它们。
PJTraill '16

我同意寻找帮助有点麻烦。我怀疑他们优先考虑纯文本搜索。我的意思是,如果一个人知道或假设它必须存在,可以很容易地找到它;我经常遵循这条路线,因为我更喜欢在找到规范文档后再使用它。我不是故意要贬低别人。我认为这既是“太难了”又是“不是太难” —如果您将“不是太”视为合格的“难”,并在隐式“为了什么而难”中添加答案,则它们不是对立的。
PJTraill

我“知道” REGEXP标记正在使用'()',重新阅读了文档,但是它没有用...所以我来这里是为了确保...然后我做了更多的实验,然后用了。因此,恕我直言,MSDN文档必须非常清楚,对于那些不得不学习VS6旧“标记”命名法的人来说,()用于标记表达式。如果他们可以使用相同的术语,那就太好了。带编号的组...只是不能很好地激发突触恕我直言。
罗斯·杨布洛德

Answers:


355

要在VS 2012和VS 2015中查找和替换,请执行以下操作:

例子(感谢syonip)

在查找选项中,确保选中“使用正则表达式”,然后将以下内容作为查找的文本:

_platformActions.InstallApp\((.+)\)

以下是将其替换为的文本:

this.Platform().App($1).Install()

注意:正如SLaks在下面的评论中指出的,正则表达式语法的更改是由于VS2012切换到标准.Net正则表达式引擎。

注意:另一位评论者指出,这也适用于Visual Studio Code(vscode)


10
更笼统地说,VS2012现在使用标准的.Net正则表达式引擎。
SLaks

4
您是否不需要对_platformActions和之间的句点char进行转义InstallApp
rory.ap 2016年

现在考虑一下,这将是有道理的。我还没有测试。随时在其中进行编辑。
SgtPooki

1
最终,我使用了命名,因为数字似乎至少对我不起作用。(?<rval>.+)搜索和替换${rval}
Mark Schultheiss

2
一些额外的帮助:如果您想用thing $ 18替换thing(。*)(在捕获后直接添加“ 8”),则必须使用thing $ {1} 8
Luc Bloom

17

要添加一个示例,这是我必须在代码中执行的操作:

找什么:

_platformActions.InstallApp\((.+)\)

用。。。来代替:

this.Platform().App($1).Install()

这将使用this.Platform()。App(x).Install()替换对InstallApp(x)的任何调用。

*不要忘记在“查找”选项中标记“使用正则表达式”


9

如果要使用组名(使用与上述相同的示例):

找什么:

_platformActions\.InstallApp\((?<mygroupname>.+)\)

用。。。来代替:

this.Platform().App(${mygroupname}).Install()

8

要改善以上答案:您应该更换

_platformActions.InstallApp\((.+)\)

this.Platform().App(${1}).Install()

如果您想在捕获后添加数字,请注意$ {1}$18将尝试插入第18个搜索捕获,而不是第一个带有8附加捕获的捕获。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.