How to use named groups when performing a Regex.Replace()
How do I use named captures when performing Regex.Replace? I have gotten this far and it does what I want but not in the way I want it:
[TestCase("First Second", "Second First")]
public void NumberedReplaceTest(string input, string expected)
{
Regex regex = new Regex("(?<firstMatch>First) (?<secondMatch>Second)");
Assert.IsTrue(regex.IsMatch(input));
string replace = regex.Replace(input, "$2 $1");
Assert.AreEqual(expected, replace);
}
I want to match the two words with named captures and then use the (named) captures when performing the replace.
Solution 1:
Instead of "$2 $1"
, you can use "${secondMatch} ${firstMatch}"
.
There is a list of all the replacements you can do here.
Here is an abbreviated list:
$number - The captured group by number.
${name} - The captured group by name.
$$ - $ literal.
$& - Entire match.
$` - The input string before the match.
$' - The input string after the match.
$+ - The last group captured.
$_ - The entire input string.
Solution 2:
Simply replace with ${groupName}
[TestCase("First Second", "Second First")]
public void NumberedReplaceTest(string input, string expected)
{
Regex regex = new Regex("(?<firstMatch>First) (?<secondMatch>Second)");
Assert.IsTrue(regex.IsMatch(input));
string replace = regex.Replace(input, "${secondMatch} ${firstMatch}");
Assert.AreEqual(expected, replace);
}