将字符串拆分为2个不同数量的字符,跳过非字母数字

时间:2012-10-29 17:16:34

标签: ruby

我有一个字符串:

hn$8m3kj4.23hs@8;

我需要将其拆分如下:第一个条目应该是一个字符长度,第二个条目是2个字符,第三个条目是一个字符,第四个字符是2个字符,依此类推。

然后用分号:

连接一个char和两个chars条目

如果最后的某些字符仍未配对,则也应显示它们。

跳过所有非字母数字字符很重要。

所以最后的字符串应该是:

h:n8 m:3k j:42 3:hs 8:

看,8没有2个字符对,但无论如何它都显示出来。

我试过一个循环,但我得到了巨大的代码。 也尝试了正则表达式,但它被错误的字符数分开。

1 个答案:

答案 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:"

请参阅live demo here