给定 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
然后将元素分组为双元素子数组。 map
获取每个双元素子数组,执行 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"
]
我们没有看到它经常被使用,但它很有用。
关于ruby - 如何跨新行拆分字符串并保留空行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12062126/