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

发布于 2024-09-18 07:53:16 字数 411 浏览 8 评论 0原文

我有一个字符串:

"116,118,120,130"

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

为此,我使用的是:

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

但问题是字符串包含额外的不必要的逗号:

"116,,120,130"

如果我使用

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

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

如何匹配我要优雅删除的值前面可能有或没有逗号的字符串部分?

谢谢,

I have a string:

"116,118,120,130"

and will want to delete either the first, last or any value in between upon execution.

To to this I was using:

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

but the problem is the string contains an extra unnessesary comma:

"116,,120,130"

and if I use

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

it will remove the comma, but then won't match "116" in the string as there is no comma in front of "116"

How can I match parts of my string that may or my not have the comma in front of value I am removing elegantly?

Thanks,

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

好菇凉咱不稀罕他 2024-09-25 07:53:16

嗯,我可能会尝试一些...

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

Hmm, I might try something like...

"116,118,120,130".split(',').reject{|e|e=="116"}.join(',')
梦里人 2024-09-25 07:53:16

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

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

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

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

返回“116,120”

Well, there are two easy ways to do this. First, you can use a regular expression. A simple one like:

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

Will do what you want. With 118 replaced by whatever value you are looking for. But if you are looking for more then 1 value, why not just split and recombine it. For example

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

Returns "116,120"

走过海棠暮 2024-09-25 07:53:16

如果它是稍微复杂的 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"

If it's slightly more complicated CSV data (e.g. it has embedded commas), use the csv standard library module

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"
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文