If the order is not important and there are no duplicates, then check an example that puts the results into dictionary:
string text = "[>[RS]06[GS]PTVK1281257[GS]21PR4A[GS]11D201632[GS]Q60[GS]18VLMDM5[GS]1TAFJH0010-1[GS]13E5a[GS]1PW12R789B[GS]4LCN[GS][RS][EOT]]";
Dictionary<string, string> results =
Regex.Matches( text, @"(?i)](\d*[A-Z])(.+?)\[" ).Cast<Match>( ).ToDictionary( m => m.Groups[1].Value, m => m.Groups[2].Value );
Console.WriteLine( text );
foreach( var p in results )
{
Console.WriteLine( "Key: {0,-10} Value: {1}", p.Key, p.Value );
}
/*
Results:
Key: P Value: TVK1281257
Key: 21P Value: R4A
Key: 11D Value: 201632
Key: Q Value: 60
Key: 18V Value: LMDM5
Key: 1T Value: AFJH0010-1
Key: 13E Value: 5a
Key: 1P Value: W12R789B
Key: 4L Value: CN
*/