J'essaie d'écrire une expression de remplacement d'expression régulière qui remplacera un nom de type générique complet par son équivalent C#. Par exemple, le texte suivant:Une expression régulière Remplacer une expression peut-elle accéder à plusieurs captures dans un groupe nommé?
System.Collections.Generic.Dictionary`2[[System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[MyNamespace.MyClass, MyAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]
deviendrait le suivant: C# Nom de type:
System.Collections.Generic.Dictionary<System.String, MyNamespace.MyClass>
Mon expression régulière doit travailler quel que soit le nombre de paramètres de type il y a dans le type générique. J'ai écrit une expression qui capture avec succès le type générique et ses paramètres de type en deux groupes nommés:
^(?<GenericType>.+)`\d\[(?:\[?(?<GenericTypeParam>\S*),[^\]]+\]?,?)+\]$
Maintenant je dois écrire le remplacer l'expression qui génère le nom du type C#. Mais comme il peut y avoir plus d'une capture dans le groupe "GenericTypeParam", je dois pouvoir faire référence à un nombre variable de captures dans mon expression de remplacement. Voici le remplacer l'expression que j'ai en ce moment:
${GenericType}<${GenericTypeParam}>
Mais parce qu'il fait référence au groupe « GenericTypeParam » par son nom, il obtient la valeur du groupe, qui est la valeur de la dernière capture dans le groupe. Ainsi, la sortie de cette expression remplacer est:
System.Collections.Generic.Dictionary<MyNamespace.MyClass>
Donc, ma chaîne de sortie ne contient que la dernière capture dans le groupe. Y a-t-il un moyen d'accéder aux autres captures dans l'expression de remplacement?