Как получить все цифры из строки предложения, например, "Lorem 123 ipsum 456 879" = > "123456879" с использованием регулярного выражения в рубине?
Как получить все цифры из строки regexp ruby
Ответ 1
Просто замените все остальное.
result = subject.gsub(/[^\d]/, '')
Ответ 2
Без регулярного выражения:
"Lorem 123 ipsum 456 879".delete('^0-9') #=>"123456879"
Ответ 3
Ref this
result = subject.gsub(/\D/, '')
Ответ 4
"Lorem 123 ipsum 456 879".scan(/\d+/).join # => "123456879"
Ответ 5
Версия от @steenslag - самая быстрая, спасибо!
require 'benchmark'
class ExtractInt
def self.v1(string)
string.gsub(/[^\d]/, '')
end
def self.v2(string)
string.gsub(/\D/, '')
end
def self.v3(string)
string.delete('^0-9')
end
def self.run(m, arg)
10000.times do
self.send(m, arg)
end
end
end
Benchmark.bmbm do |x|
x.report('v1') { ExtractInt.run(:v1, 'AAAA4000') }
x.report('v2') { ExtractInt.run(:v2, 'AAAA4000') }
x.report('v3') { ExtractInt.run(:v3, 'AAAA4000') }
end
# Rehearsal --------------------------------------
# v1 0.040000 0.000000 0.040000 ( 0.041564)
# v2 0.040000 0.000000 0.040000 ( 0.042386)
# v3 0.010000 0.000000 0.010000 ( 0.011604)
# ----------------------------- total: 0.090000sec
# user system total real
# v1 0.040000 0.000000 0.040000 ( 0.042176)
# v2 0.040000 0.000000 0.040000 ( 0.043753)
# v3 0.010000 0.000000 0.010000 ( 0.012960)
Ответ 6
Некоторые правильные ответы уже заданы, что, вероятно, включает в себя то, что вы хотите использовать. Немного более низкий уровень:
"Lorem 123 ipsum 456 879".chars.select {|c| c =~ /\d/}.join
Ответ 7
Я всегда думал, что использование скобок было проще читать
"nwa240".chars.select {|s| s =~ /[0-9]/}