【问题标题】:Ruby string.split method returns rubbish in arrayRuby string.split 方法在数组中返回垃圾
【发布时间】:2013-07-18 03:54:25
【问题描述】:

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

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

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

【问题讨论】:

  • 大声笑,这怎么能被标记为“不清楚你在问什么”答案已经明确给出之后?

标签: ruby regex split


【解决方案1】:

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

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

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

通常使用 split 函数,分隔符会被排除在结果之外。分组括号使其将分隔符保留在结果中。如果没有这些组,您将拥有:

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

这很有意义,直到最后一个 0 之前,分隔符之间没有任何内容。然后,当您添加分组时,它会在分隔符中穿插“中间”,这是拆分的通常结果。空字符串不是废品,数字组才是。

最后,在实际查看documentation 之后,我们读到:

如果pattern 是一个正则表达式,str 在匹配的地方被分割。每当模式与零长度字符串匹配时,str 就会被拆分为单个字符。如果 pattern 包含组,则相应的匹配项也会在数组中返回。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-13
    • 2011-10-30
    • 1970-01-01
    相关资源
    最近更新 更多