提取匹配组名称:更清洁的方法吗?

时间:2010-10-27 20:24:20

标签: c# regex

假设我有一个"((?<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));
    }
}

1 个答案:

答案 0 :(得分:2)

foreach(string groupName in objRegex.GetGroupNames())
{
   if (objMatch.Groups[groupName].Success)
      Trace.WriteLine(groupName);
}

请注意,Regex.GetGroupNames也认为"0"是一个群组(整个匹配),因此如果您不需要,可能需要对其进行过滤。