Text:
1,2,3,4,5,6
Regex:
(?<num>\d+,)+(?<num>\d+)
-------------------------------------
er...这就是我的问题了。num分组重复的在正则表达式中出现,事实上,都合并在一个分组了,没仔细了解过。这是否是分组的特性?以前居然不知道。
如果正则看不太明白我说的问题,那上代码string test = "1,2,3,4,5,6";
Match m = Regex.Match(test, @"((?<num>\d+),)+(?<num>\d+)");
foreach (Capture c in m.Groups["num"].Captures)
{
Console.WriteLine(c.Value);
}
//输出
/*
1
2
3
4
5
6
*/这里num命名组实际上有2个分组同名了,结果就一起输出了?如果这样,岂不是可以:test:
1,2,3words
Regex:
((?<num>\d+),)+(?<num>\d+)(?<num>[a-z]+)string test = "1,2,3words";
Match m = Regex.Match(test, @"((?<num>\d+),)+(?<num>\d+)(?<num>[a-z]+)");
foreach (Capture c in m.Groups["num"].Captures)
{
    Console.WriteLine(c.Value);
}
//输出
/*
1
2
3
words
*/
这样是.net正则的特性么?要说哪里用到了么。我贴个连接:
http://topic.csdn.net/u/20100701/12/aa0a949a-837e-4839-acb6-6ec0f7900ba4.html?31475

解决方案 »

  1.   

    这是属于命名捕获组的特性,应该不只是.NET支持,不过我熟悉的几种语言里只有.NET支持命名捕获组,其它的没试过Capture 可以保存匹配过程内容,而Groups只保存最后一次匹配的内容其实最后给的那个链接的问题,没必要用两个同名的捕获组的,一个就可以做到了我以前倒是利用捕获组“只保留最后一次匹配的内容”这一特性,在一个正则中使用两个以上同名的捕获组解决过问题,具体场景记不清了,是在稍复杂的正则中,用在分支结构里,哪个分支匹配上了,就取哪个分支里的命名捕获组现在没时间,晚上回去可以找一个应用案例
      

  2.   

    你的分组输出应该为
    1,
    2,
    3,
    4,
    5,
    6
    ((?<num>\d+),)+(?<num>\d+)   或者((?<num>\w+),)+(?<num>\w+)
    这样组num里面输出的才是
    1
    2
    3
    4
    5
    6