我从文件中获取节点坐标。不幸的是,对于小数字,使用以下格式:
-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作为答案。我做错了什么?
答案 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 ]
您可能需要使用\\
代替\
(我不知道对不起)