2012-07-24 25 views
-1

我试图从字符串返回从AT + CMGR = X(其中x是消息的SIM卡索引)用于.NET正则表达式需要建议,得到SIM900 GSM调制解调器的SMS信息来源

字符串信息是

\r\n+CMGR: \"REC UNREAD\",\"TrueID/TMN\",\"\",\"12/07/24,14:48:11+07\" 
\r\n 
003400310036003000300037003800350035003A0E170E230E390E210E310E190E190E35 
0E4800200041002F00430020003000380030003900350037003200360036003800200E220E2D 
0E140E400E070E340E190E040E070E400E2B0E250E370E2D002000340030002E0030003000200E1A0E320E17 
\r\n\r\n 
OK\r\n 

此字符串中有有用的信息。

REC阅读消息状态 日期为SMS 内容短信 OK消息

,并知道我们可以拉与.NET常规组此信息。

我找到了有用的线程,但我无法将该线程中的模式调整为适合我的字符串的正确模式。

String pattern = @"(?<a>\+CMGL):[ ](\d*),\"" 
         (?<b>[^\""]*)"", 
         (?<c>\d*),(?<d>\d*),\"" 
         (?<e>\+\d*)"",(?<f>\d*),\"" 
         (?<g>\d*\/\d*\/\d*,\d{2}:\d{2}:\d{2}\-\d{2})\"",\"" 
         (?<h>\d{2}\/\d{2}\/\d{2}),?\r\n,? 
         (?<i>\d{2}:\d{2}:\d{2}\-\d{2})\"", 
         (?<j>\d*)"; 

    Regex rx = new Regex(pattern, RegexOptions.IgnorePatternWhitespace); 
    Match m = rx.Match(testWord); 
    while (m.Success) 
    { 
     Console.WriteLine(m.Groups["a"].Value); 
     Console.WriteLine(m.Groups["b"].Value); 
     Console.WriteLine(m.Groups["c"].Value); 
     Console.WriteLine(m.Groups["d"].Value); 
     Console.WriteLine(m.Groups["e"].Value); 
     Console.WriteLine(m.Groups["f"].Value); 
     Console.WriteLine(m.Groups["g"].Value); 
     Console.WriteLine(m.Groups["h"].Value); 
     Console.WriteLine(m.Groups["i"].Value); 
     Console.WriteLine(m.Groups["j"].Value); 
     Console.WriteLine(""); 
     m = m.NextMatch(); 
    } 
    Console.ReadLine(); 
} 

http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/d652b20d-471c-4640-967c-b5fe71e3a42c/

非常感谢你。

回答

0

为什么不直接找模式"([^"]+)"的所有事件和状态(OK)去(\S+)\s+$

+0

非常感谢你。它的工作原理,但我怎样才能检查字符串开始+ CMGR:并以OK结束 – embarus 2012-07-24 14:27:07

+0

@embarus - 检查消息匹配模式'^ \ r \ n \ + CMGR:。* OK \ r \ n $'with'/ s'modifier ... if if,then find all occurrences of'“([^”] +)“'得到参数 – 2012-07-24 14:30:36

+0

它与此代码不匹配 var subject = string.Empty; using变种的StreamReader =新的StreamReader( “balance.txt”)) { 受试者= streamReader.ReadToEnd();} 受试者 = Regex.Unescape(被摄体); 如果(Regex.IsMatch(主题,@“^ \ r \ n \ + CMGR:。* OK \ r \ n $“)) { Console.WriteLine(”match“); } – embarus 2012-07-24 14:42:02