假设我有一个"((?<happy>foo)|(?<sad>bar)|...)"
形式的模式。可能还有更多条件。如果我想知道我找到了哪个分组(例如,搜索12bar34
将返回"sad"
,是否有比我现在的代码更清晰的方法呢?
Regex objRegex = new Regex("((?<happy>foo)|(?<sad>bar))");
Match objMatch = objRegex.Match("12bar34");
for (int i = 0; i < objMatch.Groups.Count; ++i)
{
int tmp;
if (!String.IsNullOrEmpty(objMatch.Groups[i].Value) &&
!Int32.TryParse(objRegex.GroupNameFromNumber(i), out tmp))
{
//The name of the grouping.
Trace.WriteLine(objRegex.GroupNameFromNumber(i));
}
}
答案 0 :(得分:2)
foreach(string groupName in objRegex.GetGroupNames())
{
if (objMatch.Groups[groupName].Success)
Trace.WriteLine(groupName);
}
请注意,Regex.GetGroupNames
也认为"0"
是一个群组(整个匹配),因此如果您不需要,可能需要对其进行过滤。