55

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つの単語を名前付きキャプチャと照合し、置換を実行するときに(名前付き)キャプチャを使用したいと思います。

4

2 に答える 2

112

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

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

ここに要約されたリストがあります:

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

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

$$ - $ リテラル。

$& - マッチ全体。

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

$' - 一致後の入力文字列。

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

$_ - 入力文字列全体。

于 2012-10-18T19:21:33.670 に答える
16

単に置き換える${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);
}
于 2012-10-18T19:24:34.233 に答える