2011-01-24 75 views
1

我一直在Ruby中搜索一個這樣的答案,並且還沒有找到一個好的解決方案。我想弄清楚的是如何在下一個字符與前一個字符不匹配時拆分字符串並將這些分組傳遞給數組。即。根據連續字符的運行將字符串拆分爲數組

'aaaabbbbzzxxxhhnnppp' 

成爲

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

我知道我可以只遍歷字符串中的每個字符並檢查是否有變化,但很好奇,如果有內置的,可以在一個優雅的方式解決這個事情。

+0

沒有指定,如果有自身的單個字符應該發生什麼。 – Phrogz 2011-01-24 02:21:32

+0

你說得對,我沒有。在上面的例子中,它應該只給出數組的單個字符。 – ScottW 2011-01-24 03:32:22

回答

5

可行用一個簡單的正則表達式:

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