我在C#中使用regex时遇到了一个问题。也就是说,调试器显示正确的(IMO)结果,但是当我试图在我的应用程序中打印结果时,它们是不同的(而且是错误的)。代码如下:
Match match2 = Regex.Match("048 A Dream Within A Dream (satur) (123|433) K48", "(.*)(\\((.)*?\\))\\s\\((.)*?\\)\\s.*");
string nick = match2.Groups[1].Value;
string name = match2.Groups[0].Value;
Console.WriteLine("nick - '{0}', name - '{1}'", nick, name);
预期结果将显示在调试器中,如下所示:
控制台显示不同(错误)结果:
尼克- '048一个梦在一个梦',名字- '048一个梦在一个梦(萨图尔)(123\433) K48‘
我该怎么解决呢?我希望结果与调试器中的结果完全一样。
发布于 2013-09-02 21:17:22
您忽略了这样一个事实,即Groups[0]
总是代表整个比赛。第一个捕获组在Groups[1]
中。你想:
string nick = match2.Groups[2].Value;
string name = match2.Groups[1].Value;
它在调试器中显示的原因是,您正在查看GroupCollection
中某个字段的实现细节;当它按数字请求组时,如果请求的编号为0,则返回匹配,否则会将该数字相抵1。
来自GroupCollection
的文档
如果匹配成功,则集合中的第一个元素包含与整个匹配对应的Group对象。如果正则表达式包括捕获组,则每个后续元素表示捕获的组。
发布于 2013-09-02 21:19:34
您正在查看_groups
字段,但它并不是作为Groups
属性返回的内容:
更改代码以使用Groups[1]
和Groups[2]
string nick = match2.Groups[2].Value;
string name = match2.Groups[1].Value;
https://stackoverflow.com/questions/18580834
复制相似问题