1

我有一个像这样的字符串:

hn$8m3kj4.23hs@8;

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

然后用分号将一个字符与两个字符条目连接起来:

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

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

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

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

看,8 没有 2 个字符对,但它仍然显示。

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

4

1 回答 1

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

在此处查看现场演示

于 2012-10-29T17:20:47.800 回答