捕获重复组总是返回最后一个元素,但这并不是很有帮助。例如:
var regex = new RegEx("^(?<somea>a)+$");
var match = regex.Match("aaa");
match.Group["somea"]; // return "a"我希望有一个匹配元素的集合,而不是最后一个匹配项。这有可能吗?
发布于 2012-11-27 17:19:19
CaptureCollection
您可以使用CaptureCollection,它表示单个采集组制作的一组captures。
如果quantifier未应用于捕获组,则CaptureCollection包括单个Capture对象,该对象表示与组对象相同的捕获的子字符串。
如果将quantifier应用于捕获组,则CaptureCollection将为每个捕获的子字符串包含一个捕获对象,并且Group对象仅提供有关上次捕获的子字符串的信息。
所以你可以这样做
var regex = new Regex("^(?<somea>a)+$");
var match = regex.Match("aaa");
List<string> aCaptures=match.Groups["somea"]
.Captures.Cast<Capture>()
.Select(x=>x.Value)
.ToList<string>();
//aCaptures would now contain a list of a发布于 2012-11-27 17:22:07
看看Captures集合:
match.Groups["somea"].Captures发布于 2012-11-27 17:20:42
如果您量化的组将创建与匹配项一样多的组,则必须对要匹配的事物使用量词+,而不是组。
因此,aaa中的(a)+将创建1个组,并用新出现的匹配项替换匹配项,而(a+)将使用aaa创建1个组
因此,您知道如何处理您的问题,只需将+移动到捕获组中。
https://stackoverflow.com/questions/13580848
复制相似问题