Du kannst das Ganze etwas vereinfachen, deine for-Schleife fängt den Fall, dass es keine Matches gibt schon ab:
Delphi-Quellcode:
for match in matches do begin
if match.Groups.Count < 3 then Continue;
mainToken := match.Groups[1].Value;
subTokens := match.Groups[2].Value;
if subTokens <> '' then
Result:= mainToken+' ('+ subTokens+ ')'
else
Result:= mainToken;
end;
Deine RegEx enthält aber nur eine Capturing Group und eine Non-capturing Group, es wird also nie mehr als 2 Groups geben können.
Beschreibe doch bitte mal, was deine RegEx eigentlich erreichen soll.