在MATLAB中拆分复杂文本



我有一个字符串如下:

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函数,但它将问题分解成更多的子问题。

是否有更简单的方法来分割这个文本?

谢谢

您可能需要使用正则表达式来匹配子字符串。你可以在这里阅读更多关于MATLAB正则表达式的内容

这不是最漂亮的答案,但它有效。我假设您的源字符串保持相同的格式,只有一个格式??:??:??的"时间"字符串和格式"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-BBn{"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') )

最新更新