【问题标题】:ruby regex find and replaceruby 正则表达式查找和替换
【发布时间】:2010-11-21 06:27:56
【问题描述】:

我有以下输出:
time = 15:40:32.81

我想消除 :. 使其看起来像这样:
15403281

我试过了

time.gsub(/\:\s/,'')

但这没有用。

【问题讨论】:

    标签: ruby regex


    【解决方案1】:
    "15:40:32.81".gsub(/:|\./, "")
    

    【讨论】:

      【解决方案2】:
      time = '15:40:32.81'
      numeric_time = time.gsub(/[^0-9]+/, '')
      # numeric_time will be 15403281
      

      [^0-9] 指定一个 character class 包含任何不是数字的字符(^ 在类的开头否定它),然后将被一个空字符串替换(或者,换句话说,被删除)。

      (为了清楚起见,已将\d 替换为0-9,尽管它们是等效的)。

      【讨论】:

      • + 不是必须的; time.gsub(/[^\d]/,"") 也可以。
      • @todb true,但是如果多个非数字字符连续出现,它会导致更大的字符串块被一次替换。
      • 在这么短的字符串上,这两种变化都不重要。 :) 我也从不使用 [^\d]。 [^0-9] 只是另外一个字符,我认为它可以提高阅读清晰度。我不知道两者之间是否存在性能差异。
      • @todb 据我所知,如果有任何区别,可以忽略不计。就此而言,\D 可以用来代替字符类。
      【解决方案3】:

      如果您想花哨并使用实际的时间对象...

      time = Time.now
      time.strftime("%H%M%S") + time.usec.to_s[0,2]
      # returns "15151788"
      

      【讨论】:

        【解决方案4】:
        time.delete ':.'
        

        但它会编辑您的变量。如果你不想要它:

        time.dup.delete ':.'
        

        【讨论】:

        • 实际上delete! 将执行删除。然后这个答案又是旧的,所以谁知道 2010 年会发生什么。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-03-24
        • 2015-03-25
        • 2011-06-16
        • 1970-01-01
        • 2017-01-28
        • 2015-01-11
        • 2012-12-02
        相关资源
        最近更新 更多