rubyで文字列を正規表現で分類してグループ分けする
最後の数字だけ違う文字列をグループ分けしたかったんですが、自分で書いてみるとこんな面倒くさい感じになって (´・ω・`)ショボーン
a1 = %w(foo1 foo2 foo3 bar1 bar3 buz2) a2 = a1.map{|v| v.sub(/[0-9]$/,"")}.uniq tmp = Array.new(a2.size) a2.each_with_index do |v2, i| a1.each do |v1| if v1.sub(/[0-9]$/, "") == v2 tmp[i].nil? ? tmp[i] = [v1] : tmp[i].push(v1) end end end p tmp # => [["foo1", "foo2", "foo3"], ["bar1", "bar3"], ["buz2"]]
なので、調べてみたら非常に簡単な方法が見つかりました。
a1 = %w(foo1 foo2 foo3 bar1 bar3 buz2) p a1.group_by{|x| x[/[a-zA-Z]+/] }.values
Rubyすげぇ!
参考
[arrays – Group strings with similar pattern in Ruby – Stack Overflow][1]