日期:2014-05-18  浏览次数:20794 次

字符读取操作,被大括号{}难住了,求解
有人给了个网络通信协议报文,
格式为:{学校}{班级}{课目}{{姓名1}{姓名2}}{{成绩}{成绩}},
例如{第一中学}{一年级}{数学}{{张三}{李四}}{{89}{92}}。
实际的格式更复杂,大括号是层层嵌套,括号多的的不得了,我想按层读取括号,比如,第一次读取到{第一中学}{一年级}{数学},第二次读取到{{张三}{李四}}。括号的层数不是固定的,只读取求高手给支招,怎么处理这么多的大括号?是用split呢,还是正则或其他。请给详细答案,谢谢!



------解决方案--------------------
C# code

            string tstr = "{第一中学}{一年级}{数学}{{张三}{李四}}{{89}{92}}";
            //Regex reg = new Regex(@"\{[^\{\}]* ( ( (?'Open'\{)[^\{\}]* )+ ( (?'-Open'\})[^\{\}]* )+ )* (?(Open)(?!)) \}");
            //Regex reg = new Regex(@"\{[^{}]*\}");
            Regex reg = new Regex(@"\{[^{}]*(((?'Open'{)[^{}]*)+((?'-Open'})[^{}]*)+)*(?(Open)(?!))\}");
            string text = "";
            MatchCollection mc = reg.Matches(tstr);
            foreach (Match m in mc)
            {
                Console.WriteLine(m.Value);
            }
            Console.ReadLine();