$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
如何使用正则表达式,将上文中的字符串分成一个数组,结果为:
$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
嵌入式设备上更明显。
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就是你要的结果
}