如何在Ruby String中每5个字符插入一次标记?

www*_*www 11 ruby string insert

我想<wbr>每5个字符插入一个标签.

输入: s = 'HelloWorld-Hello guys'

预期结果: Hello<wbr>World<wbr>-Hell<wbr>o guys

Chu*_*bas 31

s = 'HelloWorld-Hello guys'
s.scan(/.{5}|.+/).join("<wbr>")
Run Code Online (Sandbox Code Playgroud)

说明:

扫描将正则表达式的所有匹配组分组到一个数组中.在.{5}比赛的任何5个字符.如果字符串末尾有字符,则它们将匹配.+.用你的字符串加入数组


pol*_*nts 9

有几种方法可以做到这一点.如果您只想插入分隔符字符串,可以使用scan后跟join如下:

s = '12345678901234567'
puts s.scan(/.{1,5}/).join(":")
# 12345:67890:12345:67
Run Code Online (Sandbox Code Playgroud)

.{1,5}匹配"任意"字符的1到5之间,但由于它是贪婪的,如果可以,它将需要5.少花钱的补贴是为了容纳最后一场比赛,剩下的剩余比赛可能不够.

另一种选择是使用gsub,它允许更灵活的替换:

puts s.gsub(/.{1,5}/, '<\0>')
# <12345><67890><12345><67>
Run Code Online (Sandbox Code Playgroud)

\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]  
Run Code Online (Sandbox Code Playgroud)

附件

参考

  • 我真的很喜欢你的不同方法和解释.+1 (2认同)