问题描述
usingSystem;usingSystem.Text.RegularExpressions;publicclassExample{publicstaticvoidMain(){stringinput="Yes.Thisdogisveryfriendly.";stringpattern=@"((w+)[s.])+";foreach(MatchmatchinRegex.Matches(input,pattern)){Console.WriteLine("Match:{0}",match.Value);for(intgroupCtr=0;groupCtr<match.Groups.Count;groupCtr++){Groupgroup=match.Groups[groupCtr];Console.WriteLine("Group{0}:{1}",groupCtr,group.Value);for(intcaptureCtr=0;captureCtr<group.Captures.Count;captureCtr++)Console.WriteLine("Capture{0}:{1}",captureCtr,group.Captures[captureCtr].Value);}}}}//Theexampledisplaysthefollowingoutput://Match:Yes.//Group0:Yes.//Capture0:Yes.//Group1:Yes.//Capture0:Yes.//Group2:Yes//Capture0:Yes//Match:Thisdogisveryfriendly.//Group0:Thisdogisveryfriendly.//Capture0:Thisdogisveryfriendly.//Group1:friendly.这就是我不明白的地方,按理说Group1应该是用@"((w+)[s.])“这个正则表达式去匹配第二个match也就是Thisdogisveryfriendly.那也有好几个,第一个是"This",第二个是"dog",第三个是"is",第四个是"very"第五个才是"friendly."为什么只取了最后一个作为这个match的Group[1]来显示呢?//Capture0:This//Capture1:dog//Capture2:is//Capture3:very//Capture4:friendly.//Group2:friendly//Capture0:This//Capture1:dog//Capture2:is//Capture3:very//Capture4:friendly
解决方案
解决方案二:
这个没什么好研究的啊,人家就是返回最后一个匹配到的,就跟你定义了个方法一样,你可以返回1代表结果,也可以返回2代表结果,人家也提供了Capture来让你获取这个group匹配到的所有结果
解决方案三:
引用1楼starfd的回复:
这个没什么好研究的啊,人家就是返回最后一个匹配到的,就跟你定义了个方法一样,你可以返回1代表结果,也可以返回2代表结果,人家也提供了Capture来让你获取这个group匹配到的所有结果
谢谢!也就是说,这是规定。如果要遍历所有,就要用CaptureCollection.
解决方案四:
group[“”].value也可以的。。。
解决方案五:
引用3楼Kim01的回复:
group[“”].value也可以的。。。
谢谢!