代码之家  ›  专栏  ›  技术社区  ›  Dex

Ruby Regex:Backreferences上的数学

  •  2
  • Dex  · 技术社区  · 14 年前

    我需要在文件中用小时替换所有分钟。

    120米

    应更改为: 2小时 1.5小时

    2 回复  |  直到 14 年前
        1
  •  6
  •   sepp2k    14 年前

    如果你能接受打印“2.0”而不是“2”,你可以:

    "120m 90m".gsub(/(\d+)m/) { "#{$1.to_f / 60.0}h"}
    #=> "2.0h 1.5h"
    

    如果需要打印时不带“.0”,则需要检查数字是否可以被60整除,如果可以,则返回 $1.to_i / 60 而不是 $1.to_f / 60.0 .

    to_s 在浮子上拆下 .0 如果字符串以“.0”结尾

        2
  •  1
  •   Shinya    14 年前

    "120m 90m".gsub(/(\d+)m/) { "#{($1.to_f / 60.0).to_s.gsub(/\.0$/, '')}h"}
    #=> "2h 1.5h"