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;
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
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.
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;
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
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.