有人给了个网络通信协议报文,
格式为:{学校}{班级}{课目}{{姓名1}{姓名2}}{{成绩}{成绩}},
例如{第一中学}{一年级}{数学}{{张三}{李四}}{{89}{92}}。
实际的格式更复杂,大括号是层层嵌套,括号多的的不得了,我想按层读取括号,比如,第一次读取到{第一中学}{一年级}{数学},第二次读取到{{张三}{李四}}。括号的层数不是固定的,只读取求高手给支招,怎么处理这么多的大括号?是用split呢,还是正则或其他。请给详细答案,谢谢!
格式为:{学校}{班级}{课目}{{姓名1}{姓名2}}{{成绩}{成绩}},
例如{第一中学}{一年级}{数学}{{张三}{李四}}{{89}{92}}。
实际的格式更复杂,大括号是层层嵌套,括号多的的不得了,我想按层读取括号,比如,第一次读取到{第一中学}{一年级}{数学},第二次读取到{{张三}{李四}}。括号的层数不是固定的,只读取求高手给支招,怎么处理这么多的大括号?是用split呢,还是正则或其他。请给详细答案,谢谢!
解决方案 »
- 怎样判断imagelist中的图片和picturebox中的图片是不是同张
- C# 读取二进制文件转换成文本文件
- C#模拟登陆问题?
- 郁闷,初学者请教
- VS2005的datagridview控件,DataGridViewCheckBoxColumn问题?
- UDP 聊天控制台程序,在别人程序基础上改的。因为日文系统注释不完全显示。
- C#里,如何很容易的复制一个类的对象,生成一个完全一样的类的对象??
- 怎样知道一个盘的大小,没有使用的空间有多大?
- DCMTK库在VS2012下编译的问题
- 利用函数GetOleDbSchemaTable为什么得到的数据库结构不是原来的默认顺序?
- 关于datagridview数据源绑定后添加行的问题
- 表格单元格不换行
然后再split一下
实例:
string soketMsg = "{第一中学}{一年级}{数学}{{张三}{李四}}{{89}{92}}";其实我就想把字符串拆解,就像脱衣服似的,层层扒掉,得到其中的信息段:
扒开第一层得到:
string[] data = {"第一中学","一年级","数学","{张三}{李四}","{89}{92}"};
如果用到其中的子信息,再扒开一层,得到:
string[] name = {"张三","李四"};
string[] score = {"89","92"};你若会平衡组,请直接给出代码吧,谢谢!
string tstr = "{第一中学}{一年级}{数学}{{张三}{李四}}{{89}{92}}";
Regex reg = new Regex(@"\{[^\{\}]* ( ( (?'Open'\{)[^\{\}]* )+ ( (?'-Open'\})[^\{\}]* )+ )* (?(Open)(?!)) \}");
string text = "";
MatchCollection mc = reg.Matches(tstr);
foreach (Match m in mc)
{
text += m.Value + " ";
}
测试结果:text = "";不给力阿
Regex reg = new Regex(@"\{((?<Open>\{)|(?<-Open>\})|[^{}])*(?(Open)(?!))\}");
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();测了没问题了,是一些转义字符和空格的问题