考虑到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然后将元素分组为两个元素子array.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相关问答推荐

安全导航运算符的使用是否应该在两种情况下进行单元测试(对象存在 + 对象无)?

为什么数组中的 splat 如此昂贵?

无法解析音频文件 track1.m4a

Sinatra + Bundler?

使用正则表达式在第一个逗号之前提取文本

Rails - RSpec - let和let!之间的区别

可可豆荚安装在iOS项目上不起​​作用

从Electron邮件中删除签名和回复

Rake 与 Thor 的自动化脚本?

Ruby 运算符优先级表

如何获取从位置 N 到 Ruby 中最后一个字符的子字符串?

Ruby 与计算机科学相关的 yield 特性

不区分大小写的数组#include?

获取类中声明的所有实例变量

判断ruby中的字符长度

你怎么说不等于在 Ruby 中?

如何在不为 RVM 用户授予 sudo 访问权限的情况下安装 RVM 系统要求

何时在 Ruby 中使用 Struct 而不是 Hash?

如何创建一个 Gemfile?

你可以在Ruby中使用分号吗?