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

おくじさんの所 via 井上さんの所

俺も頭をひねってみたけど無理やった。正規表現だけだと無理じゃないかしら...小数点以降は先読みを禁止させたいのだが、現在マッチしている開始地点が小数点より後なのか前なのか判断する手段が無い気がする。split & joinを使用したセコい解答↓しか思い付かない。見た目は簡単な関数が実は積分困難だった時の様な気分だな(高校生の時に経験した)。

ubuntu% cat a.rb 
def hogehoge(str)
  str.split('.').each_with_index { |str, idx|
    str.gsub!(/(\d)(?=(\d\d\d)+(?!\d))/, "\\1 ") if idx == 0
  }.join('.')
end
puts hogehoge("1234567890.1234567890")
puts hogehoge("1234567890")
ubuntu% ruby a.rb 
1 234 567 890.1234567890
1 234 567 890