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

Joh*_*son 44 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);
}
Run Code Online (Sandbox Code Playgroud)

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

Ken*_*rey 87

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

您可以在此处执行所有替换的列表.

这是一个简短的列表:

$ number - 按编号捕获的组.

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

$$ - $ literal.

$& - 整场比赛.

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

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

$ + - 最后一组被捕获.

$ _ - 整个输入字符串.

  • 如何在保持字符串的其余部分完整的同时用其他值替换命名组? (7认同)

Caf*_*eek 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);
}
Run Code Online (Sandbox Code Playgroud)