在c#的正则表达式中,我们可以编写正则表达式并为组指定名称,例如,
(?<One>abc)
但是,在System.Text.RegularExpressions.Group类中,组名没有属性。我们获得名称的唯一方法是
System.Text.RegularExpressions.GetGroupNames()
为什么他们不能在Group类中为属性添加属性?有没有特别的理由不通过设计这样做?
修改 当我尝试使用以下功能时,我遇到了这个问题:
Regex.Replace(string input,
string pattern,
MatchEvaluator evaluator
)
我想使用同一个评估器来处理基于不同正则表达式的多个替换。如果组中有一个name属性,那么在内部求值程序中,我可以通过查看它的名称来判断它是哪个正则表达式。但是,没有这样的财产。
我最终通过使用闭包并使用GetGroupNames来完成它,但我仍然认为它应该具有name属性。如果该组没有名称,则该属性可以为null。
答案 0 :(得分:4)
在API中未提供Group
Name
背后的逻辑是,如果您从Group
通过索引器检索GroupCollection
,则{{1}然后该组可能不是命名组;否则,您可能更愿意通过索引器检索int
。
另一方面,如果您通过索引器检索了组string
,那么您已经知道该组的名称。
答案 1 :(得分:0)
Group Class处的文档表明该类的最新版本确实具有Name属性。我的经验是,这可以在运行时使用,但不能在编译时使用(!!)我在MSDN论坛上提出了有关此问题的问题forum question