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

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

Johan Larsson asked 2020-07-18T18:55:16Z
2个解决方案
86 votes

可以使用"${secondMatch} ${firstMatch}"代替"${secondMatch} ${firstMatch}"

您可以在此处列出所有替代品。

这是一个简短的列表:

$ number-捕获的数字分组。

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

$$-$文字。

$&-整个比赛。

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

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

$ +-最后捕获的组。

$ _-整个输入字符串。

Kendall Frey answered 2020-07-18T18:56:23Z
12 votes

只需替换为${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);
}
CaffGeek answered 2020-07-18T18:56:43Z
translate from https://stackoverflow.com:/questions/12962114/how-to-use-named-groups-when-performing-a-regex-replace