在MATLAB中拆分复杂文本

时间:2014-03-23 18:38:43

标签: string matlab substring

我有一个字符串如下:

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

是否有更简单的方法来拆分此文本?

谢谢

1 个答案:

答案 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') )