如何提取所需数据?

时间:2014-02-23 09:43:45

标签: c# regex

我收到的串行数据就像这样

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或任何其他方法提取所需的数据?

1 个答案:

答案 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()或以其他方式中断: