Ruby:有没有办法只用前x次分割字符串?

时间:2010-04-04 17:47:17

标签: ruby string

例如,假设我有这个:

001, "john doe", "male", 37, "programmer", "likes dogs, women, and is lazy"

问题是这条线只应该有6个字段。但如果我将它与split分开,我会得到更多,因为逗号被不正确地用于分隔字段。

现在我正在拆分所有内容,然后当我到达第5个索引时,我连接所有字符串。但我想知道是否存在分裂(“,”,6)或沿着这些方向的东西。

2 个答案:

答案 0 :(得分:7)

Ruby在标准库中有CSV module。它会在这里做你真正需要的(忽略双引号中的逗号)。

require 'CSV.rb'
CSV::Reader.parse("\"cake, pie\", bacon") do |row| p row; end

结果:

["cake, pie", " bacon"]
=> nil

如果你像我一样昏暗并且到处都是空白,你可能想要strip结果。

答案 1 :(得分:3)

是的,你可以the_string.split(",", 6)。但是,如果在中间的某个地方引用逗号(例如001, "doe, john",...),这仍会产生“错误”的结果。

但是在这里使用Shellwords可能更合适,因为这也允许除了最后一个部分之外的其他部分在引号内包含逗号(它也会删除引号,这可能是也可能不是问题,取决于你的'重新尝试)。

示例:

require 'shellwords'
the_string = %(001, "doe, john", "male", 37, "programmer", "likes dogs, women, and is lazy")
Shellwords.shellwords the_string
#=> ["001,", "doe, john,", "male,", "37,", "programmer,", "likes dogs, women, and is lazy"]

<击>