0
string = "12abc3 def*40"

正規表現を使用せずに、その文字列から 12、3、および 40 を抽出するにはどうすればよいですか? これが正規表現の助けを借りた私の方法です。

def numberExtraction(str)
    str_array = str.split(/\D/).delete_if {|char| char == ""}
    str_array.map(&:to_i)
end
4

4 に答える 4

2

Enumearble#chunkを使用:

def extract_numbers(str)
  str.
    chars.
    chunk { |char| ('0'..'9').include? char }.
    select { |is_digit, _| is_digit }.
    map { |_, chars| chars.join }
end

extract_numbers("12abc3 def*40")
#=> ["12", "3", "40"]
于 2013-09-05T08:54:00.707 に答える
1

すべての char を繰り返し処理し、char.to_i が char と同じかどうかを確認し、同じ場合はマップします。

于 2013-09-05T08:31:41.217 に答える
-1

次の使用をお勧めしますString#scan

str = "12abc3 def*40"

str.scan(/\d+/)
#=> ["12", "3", "40"]

str.scan(/\d+/).map(&:to_i)
#=> [12, 3, 40]

正規表現を使用しますが、正規表現は当面のタスクに最適なツールです。

于 2013-09-05T09:07:00.483 に答える