Techioz Blog

Rubyで数字+文字を含む文字列から数字を抽出して配列にするにはどうすればよいですか?

概要

整数と文字を含む文字列があり、配列内のすべての数値を抽出する必要があります。次に例を示します。

str = "achance123for84faramir3toshowhis98quality"
#=> [123, 84, 3, 98] #Desired output

それらをグループ化するのに苦労しています。私が試してみました:

str.split('').select {|el| el.match(/[\d]+.*/)}
#=> ["1", "2", "3", "8", "4", "3", "9", "8"]

str.split('').select {|el| el.match(/[\d]+[\D]+/)}
#=> []

すべて小文字になります。すべての整数のグループ化を維持し、それらを配列にリストするにはどうすればよいですか?数字と文字 (a ~ z) のみが含まれると想定します。空白文字や単語以外の文字は使用できません。

(それらを整数に変換する必要はありません。それらをグループに分けるための正規表現を思いつくのに問題があるだけです。正規表現を使用しない解決策があれば、それも素晴らしいでしょう!)

解決策

次のように String#scan を使用してみてください。

str.scan(/\d+/)
#=> ["123", "84", "3", "98"]

文字列の代わりに整数が必要な場合は、それにマップを追加するだけです。

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