Reputation: 6653
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;
Upvotes: 37
Views: 36435
Reputation: 411
As simple as this in Visual Studio 2019 Find/Replace. I needed to replace FORTRAN IO format string to C++ format and used sub-expression and numbers of regexp.
Example: find: "f9.8", "f18.3", in line and replace with %9.8f, %18.3f
reg exp: Find = ( f)(\d+.\d+) Replace = %$2f
Upvotes: 3
Reputation: 1993
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
Upvotes: 3
Reputation: 19862
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+
Upvotes: 33
Reputation: 5937
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.
Upvotes: 87
Reputation: 52809
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;
Upvotes: 3
Reputation: 928
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.
Upvotes: -2