ruby - 如何跨新行拆分字符串并保留空行?

标签 ruby string split

给定 ruby 代码:

"aaaa\nbbbb\n\n".split(/\n/)

这个输出:

["aaaa", "bbbb"] 

我希望输出包含 \n\n 指示的空行——我希望结果为:

["aaaa", "bbbb", ""]

获得这个准确结果的最简单/最好的方法是什么?

最佳答案

我建议为此任务使用lines 而不是splitlines 将保留结尾的换行符,这样您就可以看到所需的空行。使用 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/

相关文章:

ruby - Ruby 读取 "do"和 "end"的方式与读取 "{"和 "}"的方式相同吗?

javascript - 在 JavaScript 中将 YYYY-MM-DD 格式的日期转换为 DD-MONTH

java - 如何在分隔值的同时创建数组列表?

python - 我正在处理文本文件,我需要这个 :

r - 使用 strsplit 分割字符串并为分割的一部分创建一个新向量

ruby-on-rails - 未定义方法 `+' 为 nil :NilClass - Ruby

ruby - 学习更高级的 Ruby OOP 构造的最佳方法是什么?

javascript - 连接前转义数组元素

字符串编码算法

swift - 如何将 NSAttributedString 拆分为 NSAttributedString 数组