using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text.RegularExpressions;
public class Test
{
public static void Main()
{
var s = "(a * (x - y)) * c";
var result = Regex.Matches(s, @"(?x)
\( # открывающая круглая скобка
(?> # начало группы, которая находит...
[^()]+| # 1+ символов, отличных от круглых скобок
(?<o>)\(| # открывающая круглая скобка (пустая строка добавляется в стек группы `o`)
(?<-o>)\) # закрывающая круглая скобка (пустая строка удаляется из стека группы `o`)
)* # повторить 0 и более раз
(?(o)(?!)) # если в стеке группы `o` остались значения, отменить совпадение
\) # закрывающая круглая скобка
| # или
[^\s()]+ # 1+ символов, отличных от пробельных и круглых скобок
")
.Cast<Match>()
.Select(m => m.Value)
.ToArray();
foreach (var x in result)
Console.WriteLine(x);
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLklPOwp1c2luZyBTeXN0ZW0uTGlucTsKdXNpbmcgU3lzdGVtLlRleHQuUmVndWxhckV4cHJlc3Npb25zOwoKcHVibGljIGNsYXNzIFRlc3QKewoJcHVibGljIHN0YXRpYyB2b2lkIE1haW4oKQoJewoJCXZhciBzID0gIihhICogKHggLSB5KSkgKiBjIjsKCQl2YXIgcmVzdWx0ID0gUmVnZXguTWF0Y2hlcyhzLCBAIig/eCkKICAgICAgXCggICAgICAgICAgICAgICAgICAgICMg0L7RgtC60YDRi9Cy0LDRjtGJ0LDRjyDQutGA0YPQs9C70LDRjyDRgdC60L7QsdC60LAKICAgICAgKD8+ICAgICAgICAgICAgICAgICAgICMg0L3QsNGH0LDQu9C+INCz0YDRg9C/0L/Riywg0LrQvtGC0L7RgNCw0Y8g0L3QsNGF0L7QtNC40YIuLi4gCiAgICAgICAgIFteKCldK3wgICAgICAgICAgICAjIDErINGB0LjQvNCy0L7Qu9C+0LIsINC+0YLQu9C40YfQvdGL0YUg0L7RgiDQutGA0YPQs9C70YvRhSDRgdC60L7QsdC+0LoKICAgICAgICAgKD88bz4pXCh8ICAgICAgICAgICMg0L7RgtC60YDRi9Cy0LDRjtGJ0LDRjyDQutGA0YPQs9C70LDRjyDRgdC60L7QsdC60LAgKNC/0YPRgdGC0LDRjyDRgdGC0YDQvtC60LAg0LTQvtCx0LDQstC70Y/QtdGC0YHRjyDQsiDRgdGC0LXQuiDQs9GA0YPQv9C/0YsgYG9gKQogICAgICAgICAoPzwtbz4pXCkgICAgICAgICAgIyDQt9Cw0LrRgNGL0LLQsNGO0YnQsNGPINC60YDRg9Cz0LvQsNGPINGB0LrQvtCx0LrQsCAo0L/Rg9GB0YLQsNGPINGB0YLRgNC+0LrQsCDRg9C00LDQu9GP0LXRgtGB0Y8g0LjQtyDRgdGC0LXQutCwINCz0YDRg9C/0L/RiyBgb2ApCiAgICAgICApKiAgICAgICAgICAgICAgICAgICAjICDQv9C+0LLRgtC+0YDQuNGC0YwgMCDQuCDQsdC+0LvQtdC1INGA0LDQtwogICAgICAgKD8obykoPyEpKSAgICAgICAgICAgIyDQtdGB0LvQuCDQsiDRgdGC0LXQutC1INCz0YDRg9C/0L/RiyBgb2Ag0L7RgdGC0LDQu9C40YHRjCDQt9C90LDRh9C10L3QuNGPLCDQvtGC0LzQtdC90LjRgtGMINGB0L7QstC/0LDQtNC10L3QuNC1CiAgICAgIFwpICAgICAgICAgICAgICAgICAgICAjINC30LDQutGA0YvQstCw0Y7RidCw0Y8g0LrRgNGD0LPQu9Cw0Y8g0YHQutC+0LHQutCwCiAgICAgfCAgICAgICAgICAgICAgICAgICAgICAjINC40LvQuAogICAgICBbXlxzKCldKyAgICAgICAgICAgICAgIyAxKyDRgdC40LzQstC+0LvQvtCyLCDQvtGC0LvQuNGH0L3Ri9GFINC+0YIg0L/RgNC+0LHQtdC70YzQvdGL0YUg0Lgg0LrRgNGD0LPQu9GL0YUg0YHQutC+0LHQvtC6CiAgICAgIikgICAgICAgICAgIAogICAgLkNhc3Q8TWF0Y2g+KCkKICAgIC5TZWxlY3QobSA9PiBtLlZhbHVlKQogICAgLlRvQXJyYXkoKTsKCiAgICAgICAgZm9yZWFjaCAodmFyIHggaW4gcmVzdWx0KQogICAgICAgIAlDb25zb2xlLldyaXRlTGluZSh4KTsKCX0KfQ==