3

C# の正規表現では、正規表現を記述してグループに名前を割り当てることができます。たとえば、

(?<One>abc)

ただし、クラス System.Text.RegularExpressions.Group には、グループ名のプロパティはありません。名前を取得できる唯一の方法は

System.Text.RegularExpressions.GetGroupNames()

名前の Group クラスにプロパティを配置できないのはなぜですか? 設計上そうしない特定の理由はありますか?

編集: 次の機能を使用しようとしたときに、この質問に出くわしました:

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

同じ 1 つのエバリュエーターを使用して、異なる正規表現に基づく複数の置換を処理したいと考えています。グループの name プロパティがあれば、エバリュエーター内で、その名前を見るだけでそれがどの正規表現であるかを知ることができます。ただし、そのようなプロパティはありません。

最終的にはクロージャーを使用して GetGroupNames を使用しましたが、それでも name プロパティが必要だと思います。グループに名前がない場合、プロパティは null になる可能性があります。

4

2 に答える 2

4

API で を指定しない理由は、 を受け取るインデクサーから を取得した場合Group、そのグループはおそらく名前付きのグループではないということです。それ以外の場合は、.NameGroupGroupCollectionintstring

一方、 を取得するインデクサーを介してグループを取得した場合はstring、グループの名前が既にわかっています。

于 2012-12-25T00:17:38.063 に答える