3

文字列内の°Cから°Fへのすべての出現を(同時に単位を変換しながら)置き換えるRubyのエレガントな正規表現方法はありますか?例えば:

「今日は25°C、明日は27°Cです。」

結果は次のようになります。

「今日は77°F、明日は81°Fです。」

4

2 に答える 2

3
# -*- encoding : utf-8 -*-
def c2f(c)
  c*9.0/5+32
end

def convert(string)
  string.gsub(/\d+\s?°C/){|s| "#{c2f(s[/\d+/].to_i)}°F"}
end

puts convert("Today it is 25°C and tomorrow 27 °C.")
# result is => Today it is 77.0°F and tomorrow 80.6°F.
于 2012-04-26T08:39:56.423 に答える
1

のブロック形式は、String#gsub必要なもののようです。

s = "Today it is 25C and tomorrow 27 C." # 
re = /(\d+\s?C)/ # allow a single space to be present, need to include the degree character
s.gsub(re) {|c| "%dF" % (c.to_f * 9.0 / 5.0 + 32.0).round } #=> "Today it is 77F and tomorrow 81F."

私は学位の文字を失いました (Unicode にあまり適していない Ruby 1.8.7 を使用しました)。

于 2012-04-26T08:33:33.983 に答える