Вы можете использовать метод scan :
data.scan(/\d+/)
#=> ["3", "43"]
Если вы хотите целые числа:
data.scan(/\d+/).map(&:to_i)
#=> [3, 43]
Вы можете извлечь значения с помощью and
, даже еслиИзменения в структуре предложения:
room_types = %w(rooms kitchen)
extracted_values = data.split('and').map do |sd|
room_type = room_types.find{ |rt| sd.include?(rt) }
{ room_type => sd.scan(/\d+/).first.to_i }
end.reduce({}, :merge)
p extracted_values
#=> { "rooms" => 3, "kitchen" => 43 }