2006-02-25

_ 三桁毎にスペースを挿入する正規表現

1234567890.12345 みたいな浮動小数点数の文字列表記があったとして、 これを 1 234 567 890.12345 みたいに整数部だけ三桁毎にスペースを挿入するにはどうしたらよいのでしょうか。

Pythonのreモジュールだと、

re.sub('(\\d{1,3})(?=(\\d{3})+(\\.\\d*)$)', '\\1 ', '1234567890.12345')

で可能なのですが、これだと 124567890 のように整数表記されていると思うようには動きません。

二つ正規表現を使うとか、他の方法で後処理するとかすれば簡単ですが、 一つだけでやる方法ってありますか?

分かる方がいたら御教授ください。

本日のツッコミ(全4件) [ツッコミを入れる]
_ 井上 (2006-02-26 11:00)

(\\.\\d*) を (\\.\\d+)? に変えるのでは何かまずいでしょうか。

_ 井上 (2006-02-26 11:03)

すいません忘れてください。

_ きむら (2006-02-27 00:18)

re.sub('(\\d{1,3})(?=(\\d{3})+(?=\\D|$))', '\\1 ', '1234567890') でどうでしょう?

_ きむら (2006-02-27 23:24)

すみません。仕様を勘違いしていました。いろいろ試行錯誤してみましたが、Perlなら以下のようにできますが(ただし小数点付きの数の場合末尾に余計な空白がついてしまう)、Pythonだと同じことが書けるのかわかりません。$str =~ s/(?: (\.\d+$) | (?:(?!^\d*\.) (?: (\d{1,3}) (?=(?:\d{3})+$) )) | (?: (\d{1,3}) (?=(?:\d{3})+\D) ) )/$+ /xg;

[]

トップ «前の日記(2006-01-31) 最新 次の日記(2006-03-01)»