【问题标题】:split number and string matlab拆分数字和字符串matlab
【发布时间】:2014-07-11 14:46:32
【问题描述】:

给定一个字符串'12.39 ert_23::ex::status = 12'。格式总是时间后跟一个字符串。我想分割时间,即12.39 和剩余的字符串。我使用了regexp,但无法达到我需要的效果。

str_in = '12.39 ert_23::ex::status = 12';
str_out =  regexp(str_in,'\d+(\.\d+)? \w*','split');

预期结果是

str_out = '12.39'  ' ert_23::ex::status = 12'

【问题讨论】:

  • 如果它始终遵循相同的格式,您也可以对其进行硬编码str_out={str_in(1:5), str_in(7:end)};

标签: regex string matlab string-split


【解决方案1】:

另一种方法:

>> C = textscan(str_in, '%f %s', 'Delimiter','')
C = 
    [12.3900]    {1x1 cell}

>> celldisp(C)
C{1} =
   12.3900
C{2}{1} =
ert_23::ex::status = 12

请注意,第一部分被解析并作为数字返回。

【讨论】:

【解决方案2】:

这个怎么样?

ind = regexp(str_in,'\d+(\.\d+)','end');
str_out = {str_in(1:ind), str_in(ind+1:end)};

【讨论】:

  • 如果空格在单元格的第二部分而不是数字,也许会很好。
【解决方案3】:

这个怎么样:

>> regexp(str_in,'(\d+(?:\.\d+)?) (.*)','tokens', 'once')

ans = 

    '12.39'    'ert_23::ex::status = 12'

>> 

【讨论】:

  • 添加 regexp(.., 'tokens', 'once') 以摆脱嵌套单元格
  • 确切地说,您必须使数字的小数部分可选以匹配 OP 正则表达式模式。您可以使用非捕获组:regexp(str, '(\d+(?:\.\d+)?) (.*)', ...)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-01
相关资源
最近更新 更多