2011-01-24 17 views
1

Rubyでこれまでの回答を探していて、良い解決策を見つけられませんでした。私が理解しようとしているのは、次の文字が前の文字と一致しない場合に文字列を分割し、グループ化を配列に渡す方法です。すなわち、連続した文字列に基づいて文字列を配列に分割する

'aaaabbbbzzxxxhhnnppp' 

['aaaa', 'bbbb', 'zz', 'xxx', 'hh', 'nn', 'ppp'] 

になり、私は単なる文字列内の各文字を反復し、変更を確認することができ知っているが、エレガントな方法でこれに取り組むことができ、内蔵のそれは何があるかどう興味があります。

+0

あなたはそれ自体が一つの文字がある場合にどうすべきかを指定していませんでした。 – Phrogz

+0

私はそうではありませんでした。上の例では、配列に単一のcharを渡しただけです。 – ScottW

答えて

5

簡単な正規表現でなんとか:

'aaaabbbbzzxxxhhnnppp'.scan(/((.)\2*)/).map{|x| x[0]} 
=> ["aaaa", "bbbb", "zz", "xxx", "hh", "nn", "ppp"] 
+1

Rubyの 'String#scan'が外側の括弧を使用して結果を出力に保持する必要があります。 '\ 2'で参照されるように内部の括弧が必要です。 Ruby 1.9でこれを 'str.scan(/。(。)\ 2 *)/)として書くこともできます。map(&:first)' – Phrogz

関連する問題