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
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
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"]
すべての char を繰り返し処理し、char.to_i が char と同じかどうかを確認し、同じ場合はマップします。
次の使用をお勧めしますString#scan
。
str = "12abc3 def*40"
str.scan(/\d+/)
#=> ["12", "3", "40"]
str.scan(/\d+/).map(&:to_i)
#=> [12, 3, 40]
正規表現を使用しますが、正規表現は当面のタスクに最適なツールです。