using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text.RegularExpressions;
 
public class Test
{
	public static void Main()
	{
		var line = "System.Action[Int32,Dictionary[Int32,Int32],Int32]";
		var pattern = @"\w+(?:\.\w+)*\[(?:,?(?<res>\w+(?:\[[^][]*])?))*";
		var result = Regex.Matches(line, pattern)
		        .Cast<Match>()
		        .SelectMany(x => x.Groups["res"].Captures.Cast<Capture>()
		            .Select(t => t.Value))
		        .ToList();
		foreach (var s in result) // DEMO
		    Console.WriteLine(s);
	}
}
				dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLklPOwp1c2luZyBTeXN0ZW0uTGlucTsKdXNpbmcgU3lzdGVtLlRleHQuUmVndWxhckV4cHJlc3Npb25zOwoKcHVibGljIGNsYXNzIFRlc3QKewoJcHVibGljIHN0YXRpYyB2b2lkIE1haW4oKQoJewoJCXZhciBsaW5lID0gIlN5c3RlbS5BY3Rpb25bSW50MzIsRGljdGlvbmFyeVtJbnQzMixJbnQzMl0sSW50MzJdIjsKCQl2YXIgcGF0dGVybiA9IEAiXHcrKD86XC5cdyspKlxbKD86LD8oPzxyZXM+XHcrKD86XFtbXl1bXSpdKT8pKSoiOwoJCXZhciByZXN1bHQgPSBSZWdleC5NYXRjaGVzKGxpbmUsIHBhdHRlcm4pCgkJICAgICAgICAuQ2FzdDxNYXRjaD4oKQoJCSAgICAgICAgLlNlbGVjdE1hbnkoeCA9PiB4Lkdyb3Vwc1sicmVzIl0uQ2FwdHVyZXMuQ2FzdDxDYXB0dXJlPigpCgkJICAgICAgICAgICAgLlNlbGVjdCh0ID0+IHQuVmFsdWUpKQoJCSAgICAgICAgLlRvTGlzdCgpOwoJCWZvcmVhY2ggKHZhciBzIGluIHJlc3VsdCkgLy8gREVNTwoJCSAgICBDb25zb2xlLldyaXRlTGluZShzKTsKCX0KfQ==