我有一个字符串如下:
6121gog211222 412 5511.0 2011-11-29 01:14:46.63231 623 734 I A-BB {“C”:true,“A”:“KA.NA_CH”,“T”:250,“L”:100 ,“P”:false,“LV”:“12.0”}
我想分割字符串并提取部分“01:14:46,true,250,100和false”。
我尝试使用strsplit函数,但它将问题分解为更多的子问题。
是否有更简单的方法来拆分此文本?
谢谢
答案 0 :(得分:1)
您可能希望使用正则表达式来匹配子字符串。您可以在MATLAB here
中阅读有关正则表达式的更多信息这不是最漂亮的答案,但它有效。我假设您的源字符串保持相同的格式,只有一个格式??:??:??
的“时间”字符串和格式为"label":value
的数据,字段用逗号分隔。在这种情况下,以下情况应该有效。
定义一个函数getval
:
function val=getval(str,label)
%// return the value from the input 'str' associated with the string in 'label'
i1=regexp(str,sprintf('"%s"',label)); %// first index
i2=regexp(str(i1:end),',|}','once'); %// index where field ends
val = str(i1+3+numel(label):i1+i2-2); %// value
您可以使用以下功能获得答案:
str = sprintf('6121gog211222 412 5511.0 2011-11-29 01:14:46.63231 623 734 I A-BB\n{"C":true,"A":"KA.NA_CH","T":250,"L":100,"P":false,"LV":"12.0"}');
ii=regexp(str,'..:..:..');
sprintf('%s, %s, %s, %s and %s', ...
str(ii:ii+7), ...
getval(str,'C'), ...
getval(str,'T'), ...
getval(str,'L'), ...
getval(str,'P') )