ruby通过重复字符或空格来拆分字符串
我该如何分割这根线ruby通过重复字符或空格来拆分字符串,ruby,regex,Ruby,Regex,我该如何分割这根线 "6885558 8866887777" => ["6", "88", "555", "8", "88", "66", "88", "7777"] 我试过了,但没用 ruby-1.8.7-p334 :020 > "111133".split(/(\d)\1+/) => ["", "1", "", "3"] split将只使用与之匹配的任何内容作为分隔符,并将其从相关字符串中删除。您需要的是: 慢慢来,\d匹配任何数字。它位于第二个捕获组中,因此\2
"6885558 8866887777" => ["6", "88", "555", "8", "88", "66", "88", "7777"]
我试过了,但没用
ruby-1.8.7-p334 :020 > "111133".split(/(\d)\1+/)
=> ["", "1", "", "3"]
split
将只使用与之匹配的任何内容作为分隔符,并将其从相关字符串中删除。您需要的是:
慢慢来,\d
匹配任何数字。它位于第二个捕获组中,因此\2*
将匹配同一数字的任何进一步出现。这将生成一个如下所示的数组
[["6", "6"], ["88", "8"], ["555", "5"], ["8", "8"],
["88", "8"], ["66", "6"], ["88", "8"], ["7777", "7"]]
因为我们只需要这些子数组中的第一项,所以我们可以使用map(&:first)
收集它们
(请注意,
str.scan(/(\d)\1*/)
只会从第一个捕获组中生成一个数组,这意味着我们只能从可能重复的数字序列中获得一个数字。)我认为拆分
方法不起作用,因为这些方法会删除与拆分
匹配的字符。我认为您可能需要迭代字符串。
[["6", "6"], ["88", "8"], ["555", "5"], ["8", "8"],
["88", "8"], ["66", "6"], ["88", "8"], ["7777", "7"]]