You are in luck because C# is one of the few languages (if not the only one) that supports subexpression captures
https://msdn.microsoft.com/en-us/library/system.text.regularexpressions.capture(v=vs.110)
The .NET API can be looked at as follows
Matches
Groups (most regex engines stop here)
Captures (unique for .NET)
It's not clear from your question what you want to match exactly but this should get you started. Ask again if you are stuck.
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);
}
}
This ouputs
Match: -group1 -group2
Group 0: -group1 -group2
Capture 0: -group1 -group2
Group 1: -group2
Capture 0: -group1
Capture 1: -group2
As you can see (Group 1, Capture 0) and (Group 1, Capture 1) offer the individual captures of a group (and not the last as in most languages)
This address I think of what you describe as "to be able to backreference each of the values separately"
(You use the term backreference but I don't think you are aiming for a replacement pattern right?)
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…