在执行Regex.Replace时如何使用命名捕获?我已经做到了这一点,它做了我想要的但不是我想要的方式:
[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);
}
我希望将两个单词与命名的捕获匹配,然后在执行替换时使用(命名)捕获。
答案 0 :(得分:81)
您可以使用"$2 $1"
。
"${secondMatch} ${firstMatch}"
您可以执行here所有替换的列表。
这是一个简短的列表:
$ number - 按号码捕获的群组。
$ {name} - 按名称捕获的群组。
$$ - $ literal。
$&amp; - 完整匹配。
$` - 匹配前的输入字符串。
$' - 匹配后的输入字符串。
$ + - 捕获的最后一组。
$ _ - 整个输入字符串。
答案 1 :(得分:12)
只需替换为${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);
}