我有如下字符串。我想匹配所有十进制数字,如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。
答案 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)