为什么sub只用正则表达式替换一个字符?

时间:2014-01-10 18:28:46

标签: ruby regex

我想从字符串中删除所有非数字字符。 /\D/是一个非数字字符([^0-9]):

irb(main):010:0> s = "(123) 456-7890"
=> "(123) 456-7890"
irb(main):011:0> s.sub( /\D*/, '' )
=> "123) 456-7890"

3 个答案:

答案 0 :(得分:5)

使用String#trString#gsub执行以下操作:

s.gsub(/[[:punct:]]|[[:space:]]/ ,'')
# => "1234567890" 
s.tr('^0-9','') # even more faster
# => "1234567890" 

答案 1 :(得分:3)

sub取代一次。 gsub取代所有。

答案 2 :(得分:2)

改用gsub:

 s.gsub( /\D/, '' )