From: TOYOFUKU Chikanobu Date: 2002-03-26T16:43:10+09:00 Subject: [ruby-list:34642] Re: 漢数字 -> 数 豊福です。 ちょっと前の話題ですが、 [ruby-list:34053] > 漢数字を数に変換する簡単なスクリプトを教えてください。 > 取りあえず 1兆-1 まででいいです。 池田さん、浦さん、フォローありがとうございました。 今頃突っ込みますが (^_^;)、浦さんのは数->漢数字ですよね。 結局次のようにしました。 【その1】 require "jcode" s.tr!("〇一ニ三二四五六七八九", "0123456789") # 次行の subst は一つにしたかったが ruby/perl 互換の正規表現が # 見つからなかったので2回にわけた s.gsub!(/([^0-9])(?=[千百十])/, "\\11"); s.sub!(/^[千百十]/, "1\&"); cs = "(?:(\\d+)千)?(?:(\\d+)百)?(?:(\\d+)十)?(?:(\\d+))?" r = Regexp.new("(?:" + cs + "億)?(?:" + cs + "万)?(?:" + cs + ")?") b = 1; t = 0 s.scan(r)[0].reverse.each {|c| t += b * c.to_i if (c); b *= 10 } p t 【その2】 require "jcode" k2e = [ [/^/, "(("], [/$/, "))"], [/十/, ")*10+("], [/百/, ")*10**2+("], [/千/, ")*10**3+("], [/万/, "))*10**4+(("] ] s.tr!("〇一ニ三二四五六七八九", "0123456789") k2e.each {|x| s.gsub!(x[0], x[1]) } s.gsub! /\(\)\*/, "" s.gsub! /\(\)/, "0" t = eval(s) p t --- 豊福 toyofuku@juice.or.jp