我有一个应用程序将 TCP 消息发送到服务器,然后返回。
它返回的消息格式如下:
0,"120"1,"数据字段 1"2,"2401"3,"数据字段 3"1403-1,"多次出现 1"1403-2,"多次出现 2"99,""
所以基本上它是一组连接在一起的字段。
每个字段都有一个标签、一个逗号和一个值 - 按此顺序排列。
标签是数字,值是引号,逗号分隔它们。
0,"120"
0 是标签,120 是值。
一条完整的消息总是以 0 字段开始,以 99,"" 字段结束。
更复杂的是,一些标签有破折号,因为它们被分成超过 1 个值。
数字的顺序并不重要。
(作为参考,这是一条“Fedex Tagged Transaction”消息)。
因此,我正在寻找一种体面的方式来验证我们是否有“完整”消息(即具有 0 和 99 字段)——因为它来自 TCP 消息,我想我必须考虑到尚未收到完整消息。
然后将其拆分以获得我需要的所有值。
我想出的最好的方法是解析一些糟糕的正则表达式,然后进行一些清理。它的核心是:(\d?\d?\d?\d?-?\d?\d,")来拆分它
string s = @"(\d?\d?\d?\d?-?\d?\d,"")";
string[] strArray = Regex.Split(receivedData, r);
Assert.AreEqual(14, strArray.Length, "Array length should be 14", since we have 7 fields.);
Dictionary<string, string> fields = new Dictionary<string, string>();
//Now put it into a dictionary which should be easier to work with than an array
for (int i = 0; i <= strArray.Length-2; i+=2)
{
fields.Add(strArray[i].Trim('"').Trim(','), strArray[i + 1].Trim('"'));
}
这真的行不通。
它有很多引号和逗号,而且格式似乎不是特别好......
我不擅长正则表达式,所以我不能把我需要它做的事情放在一起。
我什至不知道这是否是最好的方法。
任何帮助表示赞赏。