1234567890.12345
みたいな浮動小数点数の文字列表記があったとして、
これを
1 234 567 890.12345
みたいに整数部だけ三桁毎にスペースを挿入するにはどうしたらよいのでしょうか。
Pythonのreモジュールだと、
re.sub('(\\d{1,3})(?=(\\d{3})+(\\.\\d*)$)', '\\1 ', '1234567890.12345')
で可能なのですが、これだと
124567890
のように整数表記されていると思うようには動きません。
二つ正規表現を使うとか、他の方法で後処理するとかすれば簡単ですが、 一つだけでやる方法ってありますか?
分かる方がいたら御教授ください。
(\\.\\d*) を (\\.\\d+)? に変えるのでは何かまずいでしょうか。
すいません忘れてください。
re.sub('(\\d{1,3})(?=(\\d{3})+(?=\\D|$))', '\\1 ', '1234567890') でどうでしょう?
すみません。仕様を勘違いしていました。いろいろ試行錯誤してみましたが、Perlなら以下のようにできますが(ただし小数点付きの数の場合末尾に余計な空白がついてしまう)、Pythonだと同じことが書けるのかわかりません。$str =~ s/(?: (\.\d+$) | (?:(?!^\d*\.) (?: (\d{1,3}) (?=(?:\d{3})+$) )) | (?: (\d{1,3}) (?=(?:\d{3})+\D) ) )/$+ /xg;