为什么Ruby String#split不将连续尾随分隔符视为单独的实体?
我正在阅读一个政府文本文件,其中$被用作分隔符,但我认为分隔符不重要…
所以这是预期的:
'a$b$c$d'.split('$') # => ["a", "b", "c", "d"]
在我正在使用的数据文件中,列标题行(第一行)被统一填充,即没有空标题,如:
'a$b$$d' # or: 'a$b$c$'
但是,每行可能有连续的尾随分隔符,例如:
"w$x$$\r\n"
通常,我会阅读每一行并扼杀它。 但是这会导致String#split将最后两个分隔符视为一列:
"w$x$$\r\n".chomp.split('$') # => ["w", "x"]
不做chomp得到我想要的结果,虽然我应该选择最后一个元素:
"w$x$$\r\n".split('$') # => ["w", "x", "", "\r\n"]
所以我要么:
- 如果最终的非换行符不是连续的分隔符, 则选择该行
- 保留换行符,进行拆分,然后在最终字符为连续分隔符时选择最终元素
这看起来真的很尴尬……我在这里错过了一些东西吗?
您需要传递负值作为要split
的第二个参数。 这可以防止它抑制尾随空字段:
"w$x$$\r\n".chomp.split('$', -1) # => ["w", "x", "", ""]
请参阅有关split
的文档 。