Matlab:字符串中的长小数的正则表达式转换为小数点后的一定位数的小数?

时间:2014-01-30 08:51:57

标签: regex string matlab

我有如下字符串。我想匹配所有十进制数字,如regexp(myS, '\.[0-9]+', 'match'),然后删除小数点后的多余数字。你怎么能在Matlab中做到这一点?

输入字符串

\left(\begin{array}{ccc} 0.0000000000011 & 0.0023245508539986303730984218418598 & 0.0023219396894162969147146213799715 & 0.0023237598123344582745630759745836 \end{array}\right)

字符串输出

  

简易预期输出字符串

\left(\begin{array}{ccc} 0.000000 0.002324 & 0.002321 & 0.002323 \end{array}\right)
     

较难的预期输出字符串

\left(\begin{array}{ccc} 1.100E-12 & 2.324E-3 & 2.321E-3 & 2.323E-3 \end{array}\right)

P.S。我正在考虑这个难题的候选者here试图将结果很好地从Matlab转换为LaTex。

1 个答案:

答案 0 :(得分:2)

我建议将regexprep与动态替换表达式一起使用:

regexprep(inputString,'([0-9\.E-]+)','${sprintf(''%8.6f'',str2double($0))}')

这是第一个字符串的结果(注意:它正确地“舍入”,而不是截断数字)

\left(\begin{array}{ccc} 0.000000 & 0.002325 & 0.002322 & 0.002324 \end{array}\right)

这是第二个更难的输入字符串

的结果
\left(\begin{array}{ccc} 0.000000 & 0.002324 & 0.002321 & 0.002323 \end{array}\right)

修改

注意到它说“更难输出字符串” - 这是如何实现的(虽然它确实带有一个总是两位数的指数)。当然,如果您不想匹配指数表示法,则可以省略匹配表达式中的E-

out = regexprep(instr,'([0-9\.E-]+)','${sprintf(''%5.3e'',str2double($0))}')
ans =
\left(\begin{array}{ccc} 1.100e-12 & 2.325e-03 & 2.322e-03 & 2.324e-03 \end{array}\right)