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 = "this is (a (string))";
var pattern = @"\(((?>[^()]+|\((?<o>)|\)(?<-o>))*(?(o)(?!)))\)|\S+";
var result = Regex.Matches(line, pattern)
.Cast<Match>()
.SelectMany(x => x.Groups.Cast<Group>()
.Where(m => !string.IsNullOrWhiteSpace(m.Value))
.Select(t => t.Value))
.ToList();
foreach (var s in result)
Console.WriteLine(s);
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLklPOwp1c2luZyBTeXN0ZW0uTGlucTsKdXNpbmcgU3lzdGVtLlRleHQuUmVndWxhckV4cHJlc3Npb25zOwoKcHVibGljIGNsYXNzIFRlc3QKewoJcHVibGljIHN0YXRpYyB2b2lkIE1haW4oKQoJewogICAgCXZhciBsaW5lID0gInRoaXMgaXMgKGEgKHN0cmluZykpIjsKICAgIAl2YXIgcGF0dGVybiA9IEAiXCgoKD8+W14oKV0rfFwoKD88bz4pfFwpKD88LW8+KSkqKD8obykoPyEpKSlcKXxcUysiOwogICAgCXZhciByZXN1bHQgPSBSZWdleC5NYXRjaGVzKGxpbmUsIHBhdHRlcm4pCiAgICAJCS5DYXN0PE1hdGNoPigpCiAgICAJCS5TZWxlY3RNYW55KHggPT4geC5Hcm91cHMuQ2FzdDxHcm91cD4oKQogICAgCQkJLldoZXJlKG0gPT4gIXN0cmluZy5Jc051bGxPcldoaXRlU3BhY2UobS5WYWx1ZSkpCiAgICAJCQkuU2VsZWN0KHQgPT4gdC5WYWx1ZSkpCiAgICAJCS5Ub0xpc3QoKTsKICAgICAgICBmb3JlYWNoICh2YXIgcyBpbiByZXN1bHQpCiAgICAgICAgCUNvbnNvbGUuV3JpdGVMaW5lKHMpOwoJfQp9