Ruby string.split方法返回数组中的废料

时间:2013-07-19 00:39:17

标签: ruby regex split

我试图将一个字符串分成三个一组。希望有人可以解释为什么数组在下面的代码中包含结果中的废料。

"1234567890".split(/(\d{3})/)
# => ["", "123", "", "456", "", "789", "0"] 

我知道最好使用扫描来获取群组,我只是对这种特定情况感到好奇。

1 个答案:

答案 0 :(得分:7)

它与你的分组有关,比较一个更简单的版本:

"12:34:56:78:90".split(/(:)/)
=> ["12", ":", "34", ":", "56", ":", "78", ":", "90"]

"12:34:56:78:90".split(/:/)
=> ["12", "34", "56", "78", "90"]

通常使用split函数,分隔符将不在结果中。分组parens使它在结果中保留分隔符。如果没有这些小组,您将拥有:

"1234567890".split(/\d{3}/)
=> ["", "", "", "0"]

哪个有意义,分隔符之间没有任何内容直到最后0。然后,当您添加分组时,它会在分隔符之间插入分隔符的“中间”分隔符。空字符串不是废品,数字组是。

最后,实际上看了documentation,我们读到了:

  

如果pattern是Regexp,则str在模式匹配的位置被划分。只要模式匹配零长度字符串,str就会分成单个字符。如果pattern包含组,则相应的匹配也将在数组中返回。