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

「無効なコマンド名 "+-" というエラーメッセージが表示される理由がわかりません。中括弧内に正規表現がある限り{}、式はインタープリターによって評価されるべきではありません。私にとって、これは目的の結果を達成するために機能しました:

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 に答える