Разбор строки с фукцией

Имеется строка, в которой надо выделить функции и их входные данные.

Например, в строке x<=count((a=1)||(a=2))+sum((x-t)*2), результатом вывода должен быть словарь, где ключ название функции, а значение ее входные данные.

Пробовал использовать регулярное выражение (?<=((sum)|(count))\().*(?=\)), но оно в результате дает выражение до последней скобки (a=1)||(a=2))+sum((x-t)*2. А должно быть (a=1)||(a=2) и (x-t)*2.

Думаю искать подстроку с названием функции во входной строке и с помощью стека парсить входные данные.

Может кто-нибудь сталкивался с подобной задачей и имеет лучшее решение?

upd Пришел к такому решению

private static IEnumerable<FunctionInfo> FindFunctions(string formula, List<Function> functions)
{
    formula = formula.Trim();
    var function = $"^({string.Join("|", functions)})";
    var regex = new Regex(function);
    while (formula.Length > 0)
    {
        var match = regex.Match(formula);
        if (match.Success)
        {
            formula = regex.Replace(formula, string.Empty, 1);

            Stack<char> brackets = new Stack<char>();
            brackets.Push(formula[0]);

            var index = 1;
            var result = new StringBuilder();
            while (brackets.Count > 0)
            {
                if (formula[index] == '(')
                    brackets.Push(formula[index]);
                else if (formula[index] == ')')
                    brackets.Pop();

                if (brackets.Count > 0)
                    result.Append(formula[index]);

                index++;
            }

            yield return new FunctionInfo((Function)Enum.Parse(typeof(Function), match.Value), result.ToString(), $"{match.Value}({result.ToString()})");

            formula = formula.Remove(0, result.Length + 2);
        }
        else
        {
            formula = formula.Remove(0, 1);
        }
    }
}

Ответы (0 шт):