Rubyコード:
"aaaa\nbbbb\n\n".split(/\n/)
この出力:
["aaaa", "bbbb"]
出力に\n\n
で示される空白行を含めたい-結果を次のようにしたい:
["aaaa", "bbbb", ""]
この正確な結果を得るための最も簡単/最良の方法は何ですか?
このタスクには、lines
の代わりにsplit
を使用することをお勧めします。 lines
は末尾の改行を保持するため、目的の空行を確認できます。 chomp
を使用してクリーンアップします。
"aaaa\nbbbb\n\n".lines.map(&:chomp)
[
[0] "aaaa",
[1] "bbbb",
[2] ""
]
他の、より複雑な、そこに到達する方法は次のとおりです。
"aaaa\nbbbb\n\n".split(/(\n)/).each_slice(2).map{ |ary| ary.join.chomp }
[
[0] "aaaa",
[1] "bbbb",
[2] ""
]
split
でキャプチャグループを使用することを利用しています。キャプチャグループは、介在するテキストを分割した分割テキストを返します。 each_slice
は、要素を2要素のサブ配列にグループ化します。 map
は各2要素サブ配列を取得し、join
に続いてchomp
を実行します。
または:
"aaaa\nbbbb\n\n".split(/(\n)/).delete_if{ |e| e == "\n" }
[
[0] "aaaa",
[1] "bbbb",
[2] ""
]
split
が返すものは次のとおりです。
"aaaa\nbbbb\n\n".split(/(\n)/)
[
[0] "aaaa",
[1] "\n",
[2] "bbbb",
[3] "\n",
[4] "",
[5] "\n"
]
これが頻繁に使用されることはありませんが、役に立つ場合があります。
Splitの2番目のパラメーターに負の引数を指定すると、末尾の空の文字列が削除されないようにすることができます。
"aaaa\nbbbb\n\n".split(/\n/, -1)
これにより、必要なものと比較して1つの余分な空の文字列が得られることに注意してください。
数値引数を使用できますが、IMOは(IMO)が期待するものと完全に一貫していないため、ややトリッキーです。
jruby-1.6.7 :020 > "aaaa\nbbbb\n\n".split(/\n/, -1)[0..-2]
=> ["aaaa", "bbbb", ""]