Есть несколько вариантов сделать это. Если вы просто хотите вставить строку-разделитель, вы можете использовать scan
, а затем join
следующим образом:
s = '12345678901234567'
puts s.scan(/.{1,5}/).join(":")
# 12345:67890:12345:67
.{1,5}
соответствует от 1 до 5 «любого» символа, но, поскольку он жадный, потребуется 5, если он может. Разрешается брать меньше для размещения последнего матча, где может не хватить остатков.
Другим вариантом является использование gsub
, которое допускает более гибкие замены:
puts s.gsub(/.{1,5}/, '<\0>')
# <12345><67890><12345><67>
\0
- это обратная ссылка на то, что соответствует группе 0, то есть всему совпадению. Таким образом, замена <\0>
эффективно помещает все регулярные выражения в буквальные скобки.
Если пробелы не должны учитываться, то вместо .
вы хотите сопоставить \s*\S
(т. Е. Не пробелы, возможно, перед ними пробелы).
s = '123 4 567 890 1 2 3 456 7 '
puts s.gsub(/(\s*\S){1,5}/, '[\0]')
# [123 4 5][67 890][ 1 2 3 45][6 7]
Вложения
Ссылки