Как использовать именованные группы при выполнении 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);
}
Я хочу совместить два слова с именованными захватами, а затем использовать (названные) захваты при выполнении замены.
Ответы
Ответ 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);
}