Search and replace in Visual Studio

2019-02-02 21:20发布

问题:

In Visual Studio, when I search within a selection, I want to replace the first instance (or second, third, etc.) of a match per line using regular expressions. How would I do this?

Search and replace

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

into the following.

foo1 = bar1;
foo2 = bar2;
...
foo20 = bar20;

回答1:

In Visual Studio 2010 and earlier, use regular expressions with back references

Visual Studio's regular expressions are completely different from what I've learned. Took me some time to figure out the correct answer.

Search for

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

Replace with

\1\2 = bar\2

Back references are done by tagging with curly braces {foo}. :d+ is the same for \d+

Read more about VS RegEx here



回答2:

In Visual Studio 2012, capture groups and backreferences are used just like in C#. You can capture them with common parenthesis, and backreference them with $0, $1, etc. Hope it helps!

Note that the syntax $1 is used for find-replace, but \1 is used for backreferences in the search string.



回答3:

I can be done without a regular expression as well:

Replace = foo with = bar.

If a regular expression is needed, one could use:

foo(\d*) = foo(\d*);

Replace with:

foo\1 = bar\2;


回答4:

Here it is, type exactly as it is displayed here

Search: (\w+\d+\s*=\s*)[^\d]+(\d+);

Replace: $1bar$2;


Read more: Using Regular Expressions in Visual Studio



回答5:

If you would be more variable:

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

This search for = and (anynumber); and replace that between.

Edit: The number is optional.