带多括号的拆分字符串表达式(C#)

带多括号的拆分字符串表达式(C#),c#,C#,我有下面的字符串,我想以这样一种方式拆分它:函数fnGetDate的两个参数都可以分开 功能: "fnGetDate('d',-1+ cint(cbool(DatePart('w',Date())<=2)) + cint(cbool(DatePart('w',Date())=2)))" 根据您的评论,计算开始和结束括号的数量对您来说是可以的 这个例子对我很有用: string str = "fnGetDate('d',-1+ cint(cbool(DatePart('w',Date())

我有下面的字符串,我想以这样一种方式拆分它:函数
fnGetDate
的两个参数都可以分开

功能:

"fnGetDate('d',-1+ cint(cbool(DatePart('w',Date())<=2)) + cint(cbool(DatePart('w',Date())=2)))"

根据您的评论,计算开始和结束括号的数量对您来说是可以的

这个例子对我很有用:

string str = "fnGetDate('d',-1+ cint(cbool(DatePart('w',Date())<=2)) + cint(cbool(DatePart('w',Date())=2)))";
int parLevel = 0;
List<string> arguments = new List<string>();
string currentString = String.Empty;

foreach (char t in str)
{
    switch (t)
    {
        case '(':
            if (t == '(') parLevel++;
            currentString += t;
            if (parLevel == 1)
            {
                arguments.Add(currentString);
                currentString = String.Empty;
            }
            break;
        case ')':
            if (t == ')') parLevel--;
            if (parLevel > 0) currentString += t;
            break;
        case ',':
            if (parLevel == 1)
            {
                arguments.Add(currentString);
                currentString = String.Empty;
            } 
            else 
                currentString += t;
            break;
        default:
            currentString += t;
            break;
    }
}
if (!String.IsNullOrEmpty(currentString)) arguments.Add(currentString);

for (int i = 0; i < arguments.Count; i++)
    Console.WriteLine("Argument {0}: {1}", i, arguments[i]);

string str=“fngedate('d'),-1+cint(cbool(DatePart('w',Date())那么你试过什么了吗?试过正则表达式-^(?>(?)|)(?)(?)|)(!(?))+((X)(?!)。还尝试计算开始括号和结束括号的数量,但没有得到正确的输出。请将您尝试过的代码添加到上述问题中。还添加您尝试过的代码的输出。如果第一个参数可能是“”,则可能需要在“case”“section”中添加一些进一步的检查。谢谢,但我不能t从最终结果中删除括号。请检查我想要的结果output@SystemOnline这样一个奇怪的期望输出:)看看我的更新。它给出了完全相同的结果,你需要的。
string str = "fnGetDate('d',-1+ cint(cbool(DatePart('w',Date())<=2)) + cint(cbool(DatePart('w',Date())=2)))";
int parLevel = 0;
List<string> arguments = new List<string>();
string currentString = String.Empty;

foreach (char t in str)
{
    switch (t)
    {
        case '(':
            if (t == '(') parLevel++;
            currentString += t;
            if (parLevel == 1)
            {
                arguments.Add(currentString);
                currentString = String.Empty;
            }
            break;
        case ')':
            if (t == ')') parLevel--;
            if (parLevel > 0) currentString += t;
            break;
        case ',':
            if (parLevel == 1)
            {
                arguments.Add(currentString);
                currentString = String.Empty;
            } 
            else 
                currentString += t;
            break;
        default:
            currentString += t;
            break;
    }
}
if (!String.IsNullOrEmpty(currentString)) arguments.Add(currentString);

for (int i = 0; i < arguments.Count; i++)
    Console.WriteLine("Argument {0}: {1}", i, arguments[i]);