为什么Capture不是2项?

时间:2017-11-23 03:13:42

标签: .net regex

Regex r = new System.Text.RegularExpressions.Regex("(\\d+)(\\w)");
Match m = r.Match("    123x   ");

MessageBox.Show(m.Captures.Count.ToString());
MessageBox.Show(m.Captures[0].Value);
MessageBox.Show(m.Captures[1].Value);

这在运行时给我异常

2 个答案:

答案 0 :(得分:2)

Match.Captures确实是Group.Captures,因为Match继承自Group,所以它指的是全局组(组0)的捕获。 / p>

这可以在constructor of Match的源代码中看到,它在其中调用索引为0的基础构造函数。

internal Match(Regex regex, int capcount, String text, int begpos, int len, int startpos)
  : base(text, new int[2], 0, "0") {
    ...
}

您想要的是Match.Groups,或更具体地m.Groups[1].Valuem.Groups[2].Value

答案 1 :(得分:0)

string pattern = @"(\d+)(\w)";
string input = "123x 45w 63 94b";
MatchCollection matches = Regex.Matches(input, pattern);
Console.WriteLine(matches.Count);
Console.WriteLine(matches[0].Value);
Console.WriteLine(matches[1].Value);

这种检查多种方式请发布您的预期结果