$GPGGA,033859.000,2500.1390,N,12125.2289,E,1,07,1.2,45.6,M,15.1,M,,0000*66$GPRMC,033852.000,A,2500.1390,N,12125.2289,E,0.00,,100610,,,A*71!AIVDM,1,1,,B,19NS7Sp02wo?HETKA2K6mUM20<L=,0*27
如何使用正则表达式,将上文中的字符串分成一个数组,结果为:
$GPGGA,033859.000,2500.1390,N,12125.2289,E,1,07,1.2,45.6,M,15.1,M,,0000*66
$GPRMC,033852.000,A,2500.1390,N,12125.2289,E,0.00,,100610,,,A*71
!AIVDM,1,1,,B,19NS7Sp02wo?HETKA2K6mUM20<L=,0*2f
以上三条规则: 
    开头是以$或!
  每条的末尾是*+(数字或A-F), 共两位以前写过一个是 (\$|!).*?\*(\d+)  这个正则表达式最后只能匹配数字不能匹配a-f 

解决方案 »

  1.   

    gps数据不要用正则。很容易导致引擎崩溃。尤其数据分析的时候,效率跟不上点这个我已经尝试过了。
    嵌入式设备上更明显。
      

  2.   


    private static void TestRegex21()
    {
        string gps_data = @"$GPGGA,033859.000,2500.1390,N,12125.2289,E,1,07,1.2,45.6,M,15.1,M,,0000*66$GPRMC,033852.000,A,2500.1390,N,12125.2289,E,0.00,,100610,,,A*71!AIVDM,1,1,,B,19NS7Sp02wo?HETKA2K6mUM20<L=,0*27";
        MatchCollection mc = Regex.Matches(gps_data, @"(?i)\$?[^*]*\*[a-f0-9]{2}");
        string[] lines = new string[mc.Count];
        for (int i = 0; i < mc.Count; i++)
        {
            lines[i] = mc[i].Value;
        }
        //lines就是你要的结果
    }