执行Regex.Replace()时如何使用命名组

时间:2012-10-18 19:19:05

标签: c# regex replace

在执行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);
}

我希望将两个单词与命名的捕获匹配,然后在执行替换时使用(命名)捕获。

2 个答案:

答案 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);
}