Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 将字符串拆分为2个不同数量的字符,跳过非字母数字_Ruby - Fatal编程技术网

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,与我尝试的循环有很大不同:)无插值,并在一个短行中拟合。非常感谢。