为什么Ruby String#split不将连续尾随分隔符视为单独的实体?

时间:2012-03-07 15:34:22

标签: ruby string

我正在阅读政府文本文件,其中$被用作分隔符,但我认为分隔符不重要......

所以这是预期的:

'a$b$c$d'.split('$')
# => ["a", "b", "c", "d"]

在我正在使用的数据文件中,列标题行(第一行)被统一填充,即没有空标题,如:

'a$b$$d'
# or: 
'a$b$c$'

但是,每行可能有连续的尾随分隔符,例如:

"w$x$$\r\n"

通常,我会读取每一行并 chomp 。但是这会导致String#split将最后两个分隔符视为一列:

"w$x$$\r\n".chomp.split('$')
# => ["w", "x"] 

不做chomp得到我想要的结果,虽然我应该选择最后一个元素:

"w$x$$\r\n".split('$')
# => ["w", "x", "", "\r\n"]

所以要么我必须:

  • 选择如果最终的非换行符不是连续的分隔符
  • 保留换行符,进行拆分,然后选择最终元素,如果最终字符是连续分隔符

这看起来真的很尴尬......我在这里错过了一些东西吗?

1 个答案:

答案 0 :(得分:18)

您需要将负值作为第二个参数传递给split。这可以防止它抑制尾随空字段:

"w$x$$\r\n".chomp.split('$', -1)
# => ["w", "x", "", ""]

请参阅the docs on split