ruby通过重复字符或空格来分割字符串

我该如何拆分这个字符串。

"6885558 8866887777" => ["6", "88", "555", "8", "88", "66", "88", "7777"] 

我试过这个,但它从未奏效。

 ruby-1.8.7-p334 :020 > "111133".split(/(\d)\1+/) => ["", "1", "", "3"] 

split将只使用匹配的任何内容作为分隔符,将其从相关字符串中删除。 您正在寻找的是scan

 str = "6885558 8866887777" str.scan(/((\d)\2*)/).map(&:first) # => ["6", "88", "555", "8", "88", "66", "88", "7777"] 

慢慢来, \d匹配任何数字。 它在第二个捕获组中,因此\2*然后匹配同一个数字的任何其他出现。 这会产生一个看起来像的数组

 [["6", "6"], ["88", "8"], ["555", "5"], ["8", "8"], ["88", "8"], ["66", "6"], ["88", "8"], ["7777", "7"]] 

由于我们只想要每个子数组中的第一个项目,我们可以使用map(&:first)收集它们。

(注意str.scan(/(\d)\1*/)只会从第一个捕获组中产生一个数组,这意味着我们只能从一系列可能重复的数字中获得一个数字。)