Вам повезло, потому что C # - один из немногих языков (если не единственный), который поддерживает подвыражения, захватывает
https://msdn.microsoft.com/en-us/ library / system.text.regularexpressions.capture (v = vs.110)
API .NET можно посмотреть следующим образом
Matches
Groups (most regex engines stop here)
Captures (unique for .NET)
Непонятно от вашего вопроса, что вы хотите точно сопоставить, но это должно вас начать. Спросите еще раз, если вы застряли.
string input = "-group1 -group2 ";
string pattern = @"(-\S*\W){2}";
foreach (Match match in Regex.Matches(input, pattern))
{
Console.WriteLine("Match: {0}", match.Value);
for (int groupCtr = 0; groupCtr < match.Groups.Count; groupCtr++)
{
Group group = match.Groups[groupCtr];
Console.WriteLine(" Group {0}: {1}", groupCtr, group.Value);
for (int captureCtr = 0; captureCtr < group.Captures.Count; captureCtr++)
Console.WriteLine(" Capture {0}: {1}", captureCtr,
group.Captures[captureCtr].Value);
}
}
Это выводит
Match: -group1 -group2
Group 0: -group1 -group2
Capture 0: -group1 -group2
Group 1: -group2
Capture 0: -group1
Capture 1: -group2
Как вы можете видеть (группа 1, захват 0) и (группа 1, захват 1) предлагают отдельные записи группы (а не последние, как на большинстве языков)
Этот адрес я думаю о том, что вы называете «иметь возможность обратного выделения каждого из значений отдельно»
(Вы используете термин «backreference», но я не думаю, что вы правы для замены шаблона?)