1

文字列から値を取得するのに問題があります。Tまたはをキャプチャしたくない番号だけが必要です:。この失敗したテストは説明します:

[TestMethod]
public void RegExTest()
{
    var rex = new Regex("^T([0-9]+):"); //as far as I understand, the () denote the capture group
    var match = rex.Match("T12:abc");
    Assert.IsTrue(match.Success);
    Assert.IsTrue(match.Groups[0].Success);
    Assert.AreEqual("12", match.Groups[0].Captures[0]); //fails, actual is "T12:"
}
4

3 に答える 3

1

したがって、T:の間の数字を一致させる必要があります。

これはそのための簡単なRegexものです

@"(?<=T)\d+(?=:)"//no need of groups here

正規表現について:

あなたの正規表現

^T([0-9]+):

このようにする必要があります

T(\d+)://^ is not needed and [0-9] can be represented as \d

ここ

Group[0] would be T:12//a full match
Group[1] would be 12//1st match within ()i.e.1st ()
Group[2] would be //2nd match within ()i.e 2nd ()
于 2012-08-22T15:09:04.250 に答える
1

ゼロ ベースの Groups コレクションは、インデックス 1 からグループをキャプチャすることを示します。
Groups[0]常に一致全体を示します。したがって、上記の代わりに
行う必要があります。Groups[1]Groups[0]

MatchGroups プロパティは、1 回の一致でキャプチャされたグループを表す Group オブジェクトを含む GroupCollection オブジェクトを返します。コレクション内の最初の Group オブジェクト (インデックス 0) は、一致全体を表します。後続の各オブジェクトは、単一のキャプチャ グループの結果を表します。

グループ コレクション

于 2012-08-22T15:00:54.057 に答える
0

グループに名前を付けて取得しました。

[TestMethod]
public void RegExTest()
{
    var rex = new Regex("^T(?<N>[0-9]+):");
    var match = rex.Match("T12:abc");
    Assert.IsTrue(match.Success);
    Assert.IsTrue(match.Groups[0].Success);
    Assert.AreEqual("12", match.Groups["N"].Value);
}

もっと難しく見るべきだった: .NET 正規表現で名前付きキャプチャ グループにアクセスするにはどうすればよいですか?

于 2012-08-22T14:56:41.110 に答える