Ruby 将字符串拆分为2个不同数量的字符,跳过非字母数字
我有一个字符串,比如:Ruby 将字符串拆分为2个不同数量的字符,跳过非字母数字,ruby,Ruby,我有一个字符串,比如: hn$8m3kj4.23hs@8; 我需要按如下方式拆分:第一个条目的长度应该是一个字符,第二个条目的长度应该是2个字符,第三个条目的长度应该是1个字符,第四个条目的长度应该是2个字符,依此类推 然后用分号将一个字符与两个字符项连接起来: 如果末尾的某些字符未配对,则也应显示它们 跳过所有非字母数字字符很重要 因此,最后一个字符串应该是: h:n8 m:3k j:42 3:hs 8: 请参见,8没有2个字符对,但仍会显示 我尝试了一个循环,但我得到了巨大的代码。 也尝
hn$8m3kj4.23hs@8;
我需要按如下方式拆分:第一个条目的长度应该是一个字符,第二个条目的长度应该是2个字符,第三个条目的长度应该是1个字符,第四个条目的长度应该是2个字符,依此类推
然后用分号将一个字符与两个字符项连接起来:
如果末尾的某些字符未配对,则也应显示它们
跳过所有非字母数字字符很重要
因此,最后一个字符串应该是:
h:n8 m:3k j:42 3:hs 8:
请参见,8没有2个字符对,但仍会显示
我尝试了一个循环,但我得到了巨大的代码。
也尝试了regexs,但按错误的字符数拆分。您可以尝试以下方法:
s = "hn$8m3kj4.23hs@8;"
s.gsub(/\W/, '').scan(/(.)(..)?/).map { |i| i.join ':' }.join ' '
=> "h:n8 m:3k j:42 3:hs 8:"
但这不会跳过下划线
如果您还需要跳过它们,请使用此选项:
s = "hn$8m3k_j4.23hs@8;_"
s.gsub(/\W|_/, '').scan(/(.)(..)?/).map { |i| i.join ':' }.join ' '
=> "h:n8 m:3k j:42 3:hs 8:"
请参见“请编辑您的问题以显示您的尝试。不,对不起,对公众来说太难看了:)一个
abcde
的输入字符串应该产生什么作为输出?嗯,我的英语这么差吗?:)它应该产生:a:bc d:e:
,因为d
和e
是“不成对的”,而abcdef
应该产生a:bc d:ef
你的英语没有问题。然而,还不清楚d:e
还是d:e:
是你想要的目标。感谢您的澄清。如果字符串包含破折号,则此操作将失败。您可能希望编辑gsub以明确拒绝非字母数字。@MarkThomas,不确定您为什么这么认为,它实际上通过\W
拒绝了非字母数字。添加了一个带有破折号的新测试,当然它通过得很好。请看上面的链接对不起,我是指下划线\W
拒绝非单词字符,下划线被视为单词字符。mm,与我尝试的循环有很大不同:)无插值,并在一个短行中拟合。非常感谢。