为什么System.Text.RegularExpressions.Group没有Name属性?

时间:2012-12-25 00:07:09

标签: c# regex regex-group

在c#的正则表达式中,我们可以编写正则表达式并为组指定名称,例如,

(?<One>abc)

但是,在System.Text.RegularExpressions.Group类中,组名没有属性。我们获得名称的唯一方法是

System.Text.RegularExpressions.GetGroupNames()

为什么他们不能在Group类中为属性添加属性?有没有特别的理由不通过设计这样做?

修改     当我尝试使用以下功能时,我遇到了这个问题:

Regex.Replace(string input,
string pattern,
MatchEvaluator evaluator
)

我想使用同一个评估器来处理基于不同正则表达式的多个替换。如果组中有一个name属性,那么在内部求值程序中,我可以通过查看它的名称来判断它是哪个正则表达式。但是,没有这样的财产。

我最终通过使用闭包并使用GetGroupNames来完成它,但我仍然认为它应该具有name属性。如果该组没有名称,则该属性可以为null。

2 个答案:

答案 0 :(得分:4)

在API中未提供Group Name背后的逻辑是,如果您从Group通过索引器检索GroupCollection,则{{1}然后该组可能不是命名组;否则,您可能更愿意通过索引器检索int

另一方面,如果您通过索引器检索了组string,那么您已经知道该组的名称。

答案 1 :(得分:0)

Group Class处的文档表明该类的最新版本确实具有Name属性。我的经验是,这可以在运行时使用,但不能在编译时使用(!!)我在MSDN论坛上提出了有关此问题的问题forum question