Ruby正则表达式查找和替换

10

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

我想要消除 :.,使它看起来像这样:
15403281

我尝试过

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

但是那没有起作用。

4个回答

16
"15:40:32.81".gsub(/:|\./, "")

6
time = '15:40:32.81'
numeric_time = time.gsub(/[^0-9]+/, '')
# numeric_time will be 15403281

[^0-9]表示一个包含任意非数字字符的字符类(在类的开头使用^进行否定),将被替换为空字符串(或者说,即被删除)。

(更新以使\d更改为0-9以提高清晰度,尽管它们是等效的。)


不需要加 + 号;time.gsub(/[^\d]/,"") 同样有效。 - todb
@todb 是的,但如果连续出现多个非数字字符,它将导致更大的字符串块被一次替换。 - Daniel Vandersluis
在这么短的字符串上,两种变化都不是很重要。 :) 我也从不使用 [^\d]。[^0-9] 只多了一个字符,我认为它有助于阅读清晰度。我不知道这两者之间是否存在性能差异。 - todb
据我所知,如果有任何差异的话,那也是微不足道的。事实上,\D 可以替代字符类被使用。 - Daniel Vandersluis

3
如果你想要更高级并使用实际的时间对象...
time = Time.now
time.strftime("%H%M%S") + time.usec.to_s[0,2]
# returns "15151788"

2
time.delete ':.'

但它将编辑您的变量,如果您不想这样:

time.dup.delete ':.'

实际上,delete! 会直接执行删除操作。不过这个答案已经有些年头了,谁知道在2010年的时候情况是怎样的呢。 - user1115652

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接