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(“\”,”)