我有一个字符串:
hn$8m3kj4.23hs@8;
我需要将其拆分如下:第一个条目应该是一个字符长度,第二个条目是2个字符,第三个条目是一个字符,第四个字符是2个字符,依此类推。
然后用分号:
如果最后的某些字符仍未配对,则也应显示它们。
跳过所有非字母数字字符很重要。
所以最后的字符串应该是:
h:n8 m:3k j:42 3:hs 8:
看,8没有2个字符对,但无论如何它都显示出来。
我试过一个循环,但我得到了巨大的代码。 也尝试了正则表达式,但它被错误的字符数分开。
答案 0 :(得分:3)
你可以试试这个:
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:"