0

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

-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 作为答案。我究竟做错了什么?

4

2 回答 2

2

我不明白为什么您会收到错误消息"invalid command name "+-"。只要大括号内有正则表达式{},解释器就不应评估该表达式。对我来说,这可以达到预期的结果:

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

编辑: 如果您希望“正常”数字(没有指数的数字)保持不变,您可以简单地?从正则表达式的尾部删除。在这种情况下,表达式将不匹配并且数字保持不变:

set Enum [regsub {^([+-]?[.0-9]+)([+-][0-9]+)$} $num {\1e\2}]
于 2013-10-25T12:22:07.540 回答
0

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

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

于 2013-10-25T11:56:00.103 回答