1

私は次のような文字列を持っています:

hn$8m3kj4.23hs@8;

次のように分割する必要があります。最初のエントリは1文字の長さ、2番目のエントリは2文字、3番目のエントリは1文字、4番目のエントリは2文字というようになります。

次に、1つの文字を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 に答える