1

我无法从字符串中捕获值。我只想要我不想捕获的数字Tor :。这个失败的测试说明:

[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

从零开始的组集合表示从索引 1 捕获组。
Groups[0]始终表示整个匹配。
因此你需要做Groups[1]而不是Groups[0]上面。

MatchGroups 属性返回一个 GroupCollection 对象,该对象包含表示单个匹配中捕获的组的 Group 对象。集合中的第一个 Group 对象(在索引 0 处)表示整个匹配。后面的每个对象代表单个捕获组的结果。

集团收藏

于 2012-08-22T15:00:54.057 回答
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 回答
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 Regex 中的命名捕获组?

于 2012-08-22T14:56:41.110 回答