Regex Matlab-如何从向量中提取特定数据
我有一些来自GPS接收器的数据,但是,一些数据被额外的字符损坏了。我想提取Regex Matlab-如何从向量中提取特定数据,regex,matlab,Regex,Matlab,我有一些来自GPS接收器的数据,但是,一些数据被额外的字符损坏了。我想提取$GPGGA和$GPVTG的时间戳(第一个字段)和数据 更清楚地说,下面是我在单元格数组中的数据示例: '1458937887.70818 $GPGGA,200228.90,3555.3269,N,15552.9641,A*25' '1458937887.709668 $GPVTG,56.740,T,56.740,M,0.069,N,0.127,K,D*2D' '1458937887.712022 ªDe¾,…´apö$™
$GPGGA
和$GPVTG
的时间戳(第一个字段)和数据
更清楚地说,下面是我在单元格数组中的数据示例:
'1458937887.70818 $GPGGA,200228.90,3555.3269,N,15552.9641,A*25'
'1458937887.709668 $GPVTG,56.740,T,56.740,M,0.069,N,0.127,K,D*2D'
'1458937887.712022 ªDe¾,…´apö$™°%=HfSrîU¾Õ½ôAqö‚>1ÀàHqgu$GPGGA,200229.00,3555.3269,N,15552.9641,C*2B'
'1458937887.714071 $GPVTG,286.847,T,286.847,M,0.028,N,0.051,K,D*28'
如您所见,这里的问题出现在第三行中,时间戳和数据之间出现了一些奇怪的字符
另一个问题是,有时第三行被分成两行,如下所示:
'1458937887.712022 ªDe¾,…´apö$™°'
'%=HfSrîU¾Õ½ôAqö‚>1ÀàHqgu$GPGGA,200229.00,3555.3269,N,15552.9641,D*24'
这使得使用regexp
非常困难
总之,我想将第三行(在这两种情况下)的格式设置为:
更新:
感谢@excaza,这解决了第一个问题(清除垃圾):
regexprep(str),(?数据是作为单元格数组输入的还是您创建的?您可以尝试使用regexprep
首先清除最后一个数字和GPGGA
之间的垃圾:regexprep(str,'\d\s(.*)(?=$GPGGA)')
谢谢,这是一个非常好的提示。虽然这会删除所有垃圾,但它也会删除时间戳本身的最后一个数字(即上面示例中的数字2
)。因此,我只是删除了\d
,它可以完美地解决第一个问题。@Hamid oops,我复制了错误的一个:regexprep(str,'(?@Suever:我使用.txt文件中的textscan
读取数据,因此它存储在单元格数组中。类似于textscan(fileID,'%s','Delimiter','\n'))
数据是作为单元格数组输入的还是您创建的?您可以尝试使用regexprep
首先清除最后一个数字和$GPGGA
之间的垃圾:regexprep(str,'\d\s(.*)(?=$GPGGA)',)
谢谢,这是一个非常好的提示。虽然这会删除所有垃圾,但它也会删除时间戳本身的最后一个数字(即上面示例中的数字2
)。因此,我只是删除了\d
,它可以完美地解决第一个问题。@Hamid oops,我复制了错误的一个:regexprep(str,'(?@Suever:我从.txt文件中使用textscan
读取数据,因此它存储在单元格数组中。类似于textscan(fileID,'%s','Delimiter','\n')
'1458937887.712022 $GPGGA,200229.00,3555.3269,N,15552.9641,D*2R'
regexprep(str, '(?<=\d\s)(.*)(?=\$GPGGA)', '')