2011-01-24 90 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"]