如何使用c#regex拆分带有嵌套参数的行?

如何使用c#regex拆分带有嵌套参数的行?,c#,C#,如何使用c#regex拆分带有嵌套参数的行 "一,;2.3'-'1','2','3' "一,;(1;2;3);(1)(1 ; 2 ; 3)"-"1","(1,2,3)"(1,2,3) 嵌套参数的数量可以是任意的如何 不是您寻求的Regex解决方案,而是此递归方法将相应地拆分嵌套结构 static IEnumerable<object> RecursiveSplit(string s) { string num = ""; for (int i = 0; i <

如何使用c#regex拆分带有嵌套参数的行

"一,;2.3'-'1','2','3'

"一,;(1;2;3);(1)(1 ; 2 ; 3)"-"1","(1,2,3)"(1,2,3)

嵌套参数的数量可以是任意的

如何


不是您寻求的
Regex
解决方案,而是此递归方法将相应地拆分嵌套结构

static IEnumerable<object> RecursiveSplit(string s)
{
    string num = "";

    for (int i = 0; i < s.Length; i++)
    {
        if (s[i] == '(')
        {
            i++;
            int start = i;
            for (int sub = 1; sub > 0; i++)
            {
                if (s[i] == '(')
                    sub++;
                else if (s[i] == ')')
                    sub--;
            }
            yield return RecursiveSplit(s.Substring(start, i - start - 1));
        }
        else if (s[i] == ';')
        {
            yield return num;
            num = "";
        }
        else
        {
            num += s[i];
        }
    }

    if (num != "")
        yield return num;
}
静态IEnumerable RecursiveSplit(字符串s)
{
字符串num=“”;
对于(int i=0;i0;i++)
{
如果(s[i]=='(')
sub++;
如果(s[i]==')')
分--;
}
收益率返回递归分割(s.Substring(start,i-start-1));
}
如果(s[i]==';')为else
{
收益数;
num=“”;
}
其他的
{
num+=s[i];
}
}
如果(num!=“”)
收益数;
}

C和C#是两种截然不同的语言。标题是C#,而问题是C。请纠正这种不一致性,并展示您迄今为止所做的尝试。这可能有助于读者不太清楚您希望从输入中得到什么结果。最好的方法可能是尝试使用支持r的编辑器然后将其转换为C的正则表达式。
static IEnumerable<object> RecursiveSplit(string s)
{
    string num = "";

    for (int i = 0; i < s.Length; i++)
    {
        if (s[i] == '(')
        {
            i++;
            int start = i;
            for (int sub = 1; sub > 0; i++)
            {
                if (s[i] == '(')
                    sub++;
                else if (s[i] == ')')
                    sub--;
            }
            yield return RecursiveSplit(s.Substring(start, i - start - 1));
        }
        else if (s[i] == ';')
        {
            yield return num;
            num = "";
        }
        else
        {
            num += s[i];
        }
    }

    if (num != "")
        yield return num;
}