在Visual Studio中进行搜索和替换

33

在Visual Studio中,当我在选定的文本中搜索时,我想使用正则表达式替换每行中的第一个(或第二个、第三个等)匹配项。我该如何做到这一点?

搜索和替换

foo1 = foo1;
foo2 = foo2;
...
foo20 = foo20;

转换成以下形式。

foo1 = bar1;
foo2 = bar2;
...
foo20 = bar20;
6个回答

83

在 Visual Studio 2012 中,捕获组和反向引用与 C# 中的用法相同。你可以使用普通括号进行捕获,并使用 $0、$1 等进行反向引用。希望这能帮助到你!

请注意,在查找替换中使用语法 $1,但在搜索字符串中使用 \1 进行反向引用。


2
我本以为在Visual Studio 2012中已经移除了反向引用,直到我看到了这个答案。官方文档http://msdn.microsoft.com/en-us/library/2k3te2cs(v=vs.110).aspx中根本没有提到。 - Klas Mellbourn
1
只是为了以VS 2012的一个例子详细说明,一个正则表达式用于从XML文档中的文本元素中删除周围的引号:_查找框_:**>"(.)"<*_替换框_:**>$1<** - Ed Graham
2
在 VS 2012 中使用适当的正则表达式太棒了!这是一个巨大的进步! - Cristian Diaconescu
在VS2019中用于查找替换,效果还不错! - A. J.

33

Visual Studio 2010 及更早版本 中,使用带有反向引用的正则表达式。

Visual Studio 的正则表达式与我所学的完全不同。花了些时间才找到正确答案。

搜索:

{foo}{:d+} = \1\2

替换为

\1\2 = bar\2

通过在花括号标记{foo}中进行tagging实现反向引用。:d+\d+是相同的。

在此处阅读有关VS正则表达式的更多信息


这个正则表达式不会返回吗?bar1 = bar1; bar2 = bar2; ... bar20 = bar20; - San
1
@RanhiruCooray:我会放弃第一部分,使用“标准”正则表达式解决方案。或者将其移到底部 - 但务必保留关于VS正则表达式风格的部分,嗯,独特。 ;) - Alan Moore
8
在VS2013中,这完全行不通。我必须用圆括号()替换花括号{},然后它才能正常工作。 - Piotr Kula
1
@ppumkin 对我来说,使用VS 2012也是一样的。 - mbomb007
这是什么鬼语法?! - Mateen Ulhaq
显示剩余4条评论

3

3
在Visual Studio 2019中,查找/替换非常简单。我需要将FORTRAN IO格式字符串替换为C++格式,并使用正则表达式的子表达式和数字。
例如:在行中查找“f9.8”、“f18.3”,并将其替换为%9.8f、%18.3f。
正则表达式:查找=(f)(\d+.\d+),替换=%$2f。

3
我可以不使用正则表达式来完成这个任务:
= foo替换为= bar
如果需要使用正则表达式,可以使用以下表达式:
foo(\d*) = foo(\d*);

替换为:

foo\1 = bar\2;

这实际上行不通,因为在Visual Studio中\d不是一个被接受的字符。 - Ranhiru Jude Cooray
3
在至少 vs 2012 版本中,用于替换的反向引用需要使用 $1 而不是 \1 - mbomb007
这是针对较旧的2012年之前版本的Visual Studio。有关更新版本,请参见此问题的答案: https://dev59.com/mHA75IYBdhLWcg3ws7ci#3147177 - paulwesterberg

-2

如果您想要更多的变量:

Regex.Replace(input, @"(?<=\= )[^;0-9]*(?=[0-9]*;)", replacewith);

这段代码用于查找 =(任意数字); 并将它们之间的内容替换。

编辑: 数字是可选的。


1
这个问题涉及到使用Visual Studio的查找/替换模块,与VB无关。 - mbomb007

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接