C# 如何提取所需数据?
我收到的串行数据是这样的C# 如何提取所需数据?,c#,regex,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 实际上是这样的 AT+CMGR=3 +CMGR: "REC READ","919742
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
实际上是这样的
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(消息索引可以有任何整数值)
记录读取(消息状态)
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或任何其他方法提取所需的数据?我认为您的主结构是基于行的,即您可以使用ReadLine()或拆分字符串:
string[] lines = mySMS.Split(new string[] {"\r\n"}, StringSplitOptions.None);
现在,行[2]
构成主数据,逗号分隔<代码>行[3]是您的G“LED”亮起的灯
要分析行[2]:
string[] parts = lines[2].Split(',');
string OriginatingNumber = parts[1];
string DateTimeStamp = parts[3];
部件[0]
将保持+CMGR:“REC READ”
,使用另一个Split()或以其他方式在:
上断开 StringSplitOptions.RemoveEmpty
将处理\r\n\r\n
上的“空”拆分,从而产生一个3元素数组而不是4元素数组。@Tim-是的,但这些空数组可能是有原因的。我宁愿保持接近给定的格式。我只需要+CMGR行中双引号之间的文本,如果要提取的实际消息中有文本,我需要带双引号的文本。如果我用(,)分开,那么我将得到“REC READ”,“919742400000”,“2014/01/17 22:52:44+22”,但我需要REC READ,919742400000,2014/01/17 22:52:44+22,不带双引号,如果G LED亮起,则实际消息为G LED亮起,如果G LED亮起,则为G LED亮起。我不需要+CMGR行中的(“),(),(,)。s=s.Replace(“\”,”)代码>