web-dev-qa-db-ja.com

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

2つの単語を名前付きキャプチャと照合し、置換の実行時に(名前付き)キャプチャを使用したい。

44
Johan Larsson

の代わりに "$2 $1"、使用できます"${secondMatch} ${firstMatch}"

実行できるすべての置換のリストがあります here

略語リストは次のとおりです。

$ number-番号でキャプチャされたグループ。

$ {name}-キャプチャされたグループの名前。

$$-$リテラル。

$&-完全一致。

$ `-一致する前の入力文字列。

$ '-マッチ後の入力文字列。

$ +-最後にキャプチャされたグループ。

$ _-入力文字列全体。

84
Kendall Frey

単に${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);
}
12
CaffGeek