Я пытаюсь написать выражение для замены регулярного выражения, которое заменит полное имя универсального типа на его эквивалент C #. Например, следующий текст:
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]]
станет следующим именем типа C #:
System.Collections.Generic.Dictionary<System.String, MyNamespace.MyClass>
Мое регулярное выражение должно работать независимо от количества параметров типа, имеющихся в универсальном типе. Я написал выражение, которое успешно захватывает универсальный тип и его параметры типа в две именованные группы:
^(?<GenericType>.+)`\d\[(?:\[?(?<GenericTypeParam>\S*),[^\]]+\]?,?)+\]$
Теперь мне нужно написать выражение замены, которое генерирует имя типа C #. Но поскольку в группе «GenericTypeParam» может быть несколько захватов, мне нужно иметь возможность ссылаться на переменное число захватов в моем выражении замены. Вот выражение замены, которое у меня есть сейчас:
${GenericType}<${GenericTypeParam}>
Но поскольку он ссылается на группу «GenericTypeParam» по имени, он получает значение группы, которое является значением последнего захвата в группе. Итак, результат этого выражения замены:
System.Collections.Generic.Dictionary<MyNamespace.MyClass>
Таким образом, моя выходная строка содержит только последний захват в группе. Есть ли способ получить доступ к другим перехватам в выражении замены?