Подтвердить что ты не робот

Как использовать именованные группы при выполнении 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);
}

Я хочу совместить два слова с именованными захватами, а затем использовать (названные) захваты при выполнении замены.

4b9b3361

Ответ 1

Вместо "$2 $1" вы можете использовать "${secondMatch} ${firstMatch}".

Список всех замен, которые вы можете сделать здесь.

Вот сокращенный список:

$number - захваченная группа по числу.

${name} - захваченная группа по имени.

$$ - $literal.

$& - полное соответствие.

$` - строка ввода перед совпадением.

$' - строка ввода после матча.

$+. Последняя группа захвачена.

$_ - вся строка ввода.

Ответ 2

Просто замените на ${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);
}