Я работаю над проблемой, которая включает в себя разделение строки на каждую группу символов.Ruby Split string при разнице символов с использованием regex
Например,
"111223334456777" #=> ['111','22','333','44','5','6','777']
Как я сейчас делаю это сейчас использует перечислитель и сравнивая каждый символ с следующей, и разделив массив, который путь.
res = []
str = "111223334456777"
group = str[0]
(1...str.length).each do |i|
if str[i] != str[i-1]
res << group
group = str[i]
else
group << str[i]
end
end
res << group
res #=> ['111','22','333','44','5','6','777']
Я хочу посмотреть, могу ли я использовать регулярное выражение для этого, что сделает этот процесс намного проще. Я понимаю, что я мог бы просто поместить этот блок кода в метод, но мне любопытно, можно ли здесь использовать regex.
Так что я хочу сделать, это
str.split(/some regex/)
для получения того же результата. Я думал о положительном взгляде, но я не могу понять, как заставить регулярное выражение распознать, что персонаж отличается.
Есть ли у кого-нибудь идеи, если это возможно?
Это не отвечает на ваш вопрос, но вы можете написать '' 111223334456777 ".each_char.slice_when {| a, b | a! = b} .map (&: join) # => ["111", "22", "333", "44", "5", "6", "777"] '. –
@CarySwoveland, вы код, безусловно, чище, чем мой, я просто написал это, чтобы уточнить, что я искал. – davidhu2000
В соответствии с комментарием Штефана о ответе Тадмана выше можно упростить «111223334456777» .each_char.slice_when (&:! =). Map (&: join) '. –