2013-10-25 42 views
0

我正在從文件中獲取節點座標。不幸的是,小號碼使用以下格式:使用format或regexp將-3.014-5轉換爲科學格式-3.014e-5

-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

我不明白爲什麼你會得到錯誤信息「無效的命令名稱」+ - 「。只要你在花括號內有正則表達式{}表達式不應該由解釋器評估。 對我來說,這可以達到預期的效果:

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

編輯: 如果你想「正常」的數字(沒有指數)保持不變,你可以簡單地從正則表達式的尾部去除?。在這種情況下,表達式將不匹配並且數字保持不變:

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

請原諒我對於正則表達式的笨拙,這不是我平常的操場。我已經通過創建這個proc來解決它:proc MakeE {In} {tail} {regsub {^([+ - ]?[。0-9] +)([+ - ]?[0-9] +)?如果{$ Tail!=「」} {} {regsub {^([+ - ]?[。0-9] +)([+ - ]?[0- 9] +)?$} $ In {\ 1e \ 2}] return $ Out } return $ In }如何直接在正則表達式中包含這個「If tail!=」「」? – Lumpi

+0

如果您希望輸入數字在沒有*尾*的情況下保持不變,您可以簡單地從正則表達式的尾部刪除問號 - 因此表達式不匹配,數字將不會更改。 – bmk

+0

非常感謝! – Lumpi

0

我不知道TCL,但我想你需要逃避+和propably - 太。
試試這個:set Enum [ regexp -all ([\+-]?[0-9]+)?$ $num ]
或者這樣:set Enum [ regexp -all ([\+\-]?[0-9]+)?$ $num ]

您可能需要使用\\而不是\(我不知道TCL對不起)

+0

錯誤。只需使用大括號。 ('[]'用於命令替換,所以轉義也可以) –

相關問題