C#中的正则表达式表现得很怪异
我在C#中使用正则表达式时遇到了一个问题。也就是说,调试器显示正确的(IMO)结果,但当我尝试在应用程序中打印结果时,它们是不同的(并且是错误的)。代码如下:C#中的正则表达式表现得很怪异,c#,regex,C#,Regex,我在C#中使用正则表达式时遇到了一个问题。也就是说,调试器显示正确的(IMO)结果,但当我尝试在应用程序中打印结果时,它们是不同的(并且是错误的)。代码如下: Match match2 = Regex.Match("048 A Dream Within A Dream (satur) (123|433) K48", "(.*)(\\((.)*?\\))\\s\\((.)*?\\)\\s.*"); string nick = match2.Groups[1]
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'
我怎么修理它?我希望结果的显示与调试器中的显示完全相同。您忽略了一个事实,即
组[0]
始终表示整个匹配。第一个捕获组位于组[1]
中。你想要:
string nick = match2.Groups[2].Value;
string name = match2.Groups[1].Value;
它在调试器中显示所需内容的原因是您正在查看GroupCollection
中字段的实现细节;当它被要求按数字分组时,如果请求的数字为0,则返回匹配,否则将数字偏移1
从以下文件中:
如果匹配成功,则集合中的第一个元素包含与整个匹配对应的组对象。如果正则表达式包含捕获组,则每个后续元素表示一个捕获组
您正在查看
\u groups
字段,但它并不是作为groups
属性返回的内容:
将代码更改为使用组[1]
和组[2]
:
string nick = match2.Groups[2].Value;
string name = match2.Groups[1].Value;
感谢您提供的宝贵信息和有效的解决方案!:)感谢您提供的宝贵信息和有效的解决方案!:)我选择了乔恩的答案,因为他是第一个回答的人——希望你不介意。