使用format或regexp将-3.014-5转换为科学格式-3.014e-5

时间:2013-10-25 11:43:28

标签: regex format tcl

我从文件中获取节点坐标。不幸的是,对于小数字,使用以下格式:

-3.014-5

没有“e” - > -3.014e-5

我不能使用格式,因为我找到的所有函数都需要一个浮点数,上面不是...... 所以我想使用正则表达式找到“-5”部分并用“e-5”替换它。 ([+ - ]?[0-9] +)?$会这样做,但我如何在TCL中使用该表达式?

set num -3.014-5
set Enum [ regexp -all { ([+-]?[0-9]+)?$ } $num ]

我得到“无效的命令名称”+ - “,所以我用方括号替换了”,但后来得到1作为答案。我做错了什么?

2 个答案:

答案 0 :(得分:2)

我不明白为什么你会收到错误信息“无效的命令名称”+ - “。只要你的正则表达式在花括号{}里面,表达式就不应该由口译员评估。 对我来说,这有助于达到预期的效果:

set Enum [regsub {^([+-]?[.0-9]+)([+-]?[0-9]+)?$} $num {\1e\2}]

修改 如果你想要“正常”数字(没有指数的数字)保持不变,你可以简单地从正则表达式的尾部删除?。在这种情况下,表达式将不匹配,数字保持不变:

set Enum [regsub {^([+-]?[.0-9]+)([+-][0-9]+)$} $num {\1e\2}]

答案 1 :(得分:0)

我不知道tcl,但我猜你需要逃避+并且可能也是 - 也是 试试这个:set Enum [ regexp -all ([\+-]?[0-9]+)?$ $num ]
或者:set Enum [ regexp -all ([\+\-]?[0-9]+)?$ $num ]

您可能需要使用\\代替\(我不知道对不起)