55

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

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

4

2 回答 2

112

而不是"$2 $1",您可以使用"${secondMatch} ${firstMatch}".

此处列出了您可以进行的所有替换。

这是一个简短的列表:

$number - 按编号捕获的组。

${name} - 按名称捕获的组。

$$ - $ 字面量。

$& - 整个匹配。

$` - 匹配前的输入字符串。

$' - 匹配后的输入字符串。

$+ - 捕获的最后一组。

$_ - 整个输入字符串。

于 2012-10-18T19:21:33.670 回答
16

只需替换为${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);
}
于 2012-10-18T19:24:34.233 回答