#! /usr/local/bin/ruby s = "20,1500-1503,50,30-35,5-8,300-302" a = s.gsub(/-/, "..").split(/,/).flat_map { |s| x = eval(s) x.is_a?(Range) ? x.to_a : x }.sort!.join(",") p a