Подтвердить что ты не робот

Ruby split string повторяющимися символами или пробелом

Как разбить эту строку.

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

Я пробовал это, но он никогда не работал.

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

Ответ 1

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*/) просто создаст массив из первой группы захвата, а это означает, что мы получим только одну цифру из последовательности, возможно, повторяющихся чисел.)