Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#中的正则表达式表现得很怪异_C#_Regex - Fatal编程技术网

C#中的正则表达式表现得很怪异

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]

我在C#中使用正则表达式时遇到了一个问题。也就是说,调试器显示正确的(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'


我怎么修理它?我希望结果的显示与调试器中的显示完全相同。

您忽略了一个事实,即
组[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;

感谢您提供的宝贵信息和有效的解决方案!:)感谢您提供的宝贵信息和有效的解决方案!:)我选择了乔恩的答案,因为他是第一个回答的人——希望你不介意。