3

在c#的正则表达式中,我们可以写一个正则表达式,给一个组赋值,例如,

(?<One>abc)

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

System.Text.RegularExpressions.GetGroupNames()

为什么他们不能在名称的 Group 类中放置一个属性?是否有特殊原因不按设计这样做?

编辑: 当我尝试使用以下功能时遇到了这个问题:

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

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

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

4

2 回答 2

4

Group在 API 中不提供a背后的逻辑Name是,如果您通过使用 a 的索引器检索了Groupfrom ,那么该组可能不是命名的;否则,您可能更喜欢通过索引器检索它。GroupCollectionintstring

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

于 2012-12-25T00:17:38.063 回答
0

Group Class的文档暗示该类的最新版本确实具有 Name 属性。我的经验是这在运行时可用,但在编译时不可用(!!)我在 MSDN 论坛论坛问题上问过一个关于此的问题

于 2017-08-17T14:32:06.997 回答