如何使用Ruby删除部分CSV字符串?

时间:2010-09-07 23:33:09

标签: ruby string

我有一个字符串:

"116,118,120,130"

并且希望在执行时删除其中的第一个,最后一个或任何值。

为此,我正在使用:

"116,118,120,130".gsub('118','')

但问题是该字符串包含一个额外的无关逗号:

"116,,120,130"

如果我使用

"116,118,120,130".gsub(',116','')

它将删除逗号,但之后将不匹配字符串中的“116”,因为“116”前面没有逗号

我如何匹配我的字符串中可能或我没有逗号的部分我正在优雅地删除?

谢谢,

3 个答案:

答案 0 :(得分:4)

嗯,我可能会尝试类似......

"116,118,120,130".split(',').reject{|e|e=="116"}.join(',')

答案 1 :(得分:0)

嗯,有两种简单的方法可以做到这一点。首先,您可以使用正则表达式。一个简单的例子:

"116,118,120,130".gsub(/(,118)|(118,)/,'')

会做你想做的事。将118替换为您正在寻找的任何值。但是,如果您正在寻找超过1的值,为什么不分裂并重新组合它。例如

"116,118,120,130".split(',').reject {|val| val == '118' || val == '130'}.join(',')

返回“116,120”

答案 2 :(得分:0)

如果CSV数据稍微复杂一些(例如它有嵌入的逗号),请使用csv标准库模块

require 'csv'
str = 'abc,def,"ghi,jlk",mno'
fields = CSV.parse_line(str)
fields.reverse!  # or do whatever manipulation
new_line = CSV.generate_line(fields) 
# => "mno,\"ghi,jlk\",def,abc\n"