我收到的串行数据就像这样
AT+CMGR=3
+CMGR: "REC READ","919742400000",,"2014/01/17 22:52:44+22"
G LED ON
OK
实际上它会是这样的
AT+CMGR=3\r\n\r\n+CMGR: "REC READ","919742400000",,"2014/01/17 22:52:44+22"\r\nG LED ON\r\n\r\n\r\nOK\r\n
我需要提取
3(消息索引可以包含任何整数值)
REC READ(消息状态)
919742400000(原始号码)
2014/01/17 22:52:44 + 22(日期时间戳)
G LED亮起(实际消息短信)
我写的VC#.Net代码是
Regex r = new Regex(@"\+CMGR: (\d+),""(.+)"",""(.+)"",(.*),""(.+)""\r\n(.+)\r\n");
Match m = r.Match(mySMS); //mySMS is a string and contains the above mentioned data
int Index = int.Parse(m.Groups[1].Value); //(3 in above example)
string Status = m.Groups[2].Value; //(REC READ)
string Sender = m.Groups[3].Value; //(919742400000)
string Sent = m.Groups[4].Value; //2014/01/17 22:52:44+22
string Message = m.Groups[5].Value; //G LED ON
另一件事是实际消息(SMS)可以包含双引号字符串,如
“G”LED“ON”,我也可以提取
G“LED”开启
以上VC#代码无效。
如何使用RegEx或任何其他方法提取所需的数据?
答案 0 :(得分:3)
我会说你的主要结构是基于行的,即你要么使用ReadLine(),要么拆分字符串:
string[] lines = mySMS.Split(new string[] {"\r\n"}, StringSplitOptions.None);
现在lines[2]
将您的主要数据包含在内,以逗号分隔。 lines[3]
是G "LED" ON
。
解析行[2]:
string[] parts = lines[2].Split(',');
string OriginatingNumber = parts[1];
string DateTimeStamp = parts[3];
parts[0]
将保留+CMGR: "REC READ"
,使用另一个Split()或以其他方式中断:
。