当前位置:编程学习 > C#/ASP.NET >>

字符串嵌套括号的分组


string str = "1,2,3,{1,2,3,{1,2,3}},{4,5,6,{4,5,6}},3,{6,7,8,{6,7,8,{10,11}}}";
//需要转成string[]:
string[0] = "1";
string[1] = "2";
string[2] = "3";
string[3] = "1,2,3,{1,2,3}";
string[4] = "4,5,6,{4,5,6}";
string[5] = "3";
string[6] = "6,7,8,{6,7,8,{10,11}}";


参考:正则与平衡组

试了很多次,没办法弄出来,请指教:(
--------------------编程问答-------------------- 老实说,这个需求很头晕! --------------------编程问答-------------------- 想法是 栈 --------------------编程问答--------------------
            string str = "1,2,3,{1,2,3,{1,2,3}},4,{4,5,6,{4,5,6}},3,{6,7,8,{6,7,8,{10,11}}},{4,5,{4,5,6},6}";
            Regex reg = new Regex(@"(?:\d+|(?:(?<Open>\{)[^{}]*?)+(?:(?<-Open>\})[^{}]*?)+(?(Open)(?!)))");
            foreach (Match m in reg.Matches(str))
                Console.WriteLine(m.Value);
/*
1
2
3
{1,2,3,{1,2,3}}
4
{4,5,6,{4,5,6}}
3
{6,7,8,{6,7,8,{10,11}}}
{4,5,{4,5,6},6}

*/
--------------------编程问答-------------------- 正则表达式不大熟悉,用了一个笨办法:(已测试)

        string str = "1,2,3,{1,2,3,{1,2,3}},{4,5,6,{4,5,6}},3,{6,7,8,{6,7,8,{10,11}}}";
        char[] charArr=str.ToCharArray();
        Queue<string> quStrs=new Queue<string>();
        bool bMatched=true;   
        int num=0;
        int index=0;
        string temp = "";
        for(int i=0;i<charArr.Length ;i++)
        {
            char ch=charArr[i];
            if (num != 0)
                temp += ch;

            if(ch=='{')
            {
                num++;      //左括号出现
                bMatched = false;
                if(num==1)  //第一次出现
                    index = i + 1;
            }


            if (ch != ',' && bMatched && num == 0 && temp == "")
            {
                quStrs.Enqueue(new string(ch, 1));
            }
            if(ch=='}')
            {
                num--;    
                if(num==0)
                {
                    bMatched = true;
                    quStrs.Enqueue(temp.Substring(0, temp.Length - 1));
                    index = 0;
                    temp = "";
                }
            }

            

        }

        string[] strs = quStrs.ToArray();


strs 就是你要的结果!
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,