【问题标题】:How to split single quoted comma delimited values containing commas in Ruby如何在Ruby中拆分包含逗号的单引号逗号分隔值
【发布时间】:2010-10-23 14:29:39
【问题描述】:

假设我有一个带有逗号分隔值的字符串,该字符串用单引号括起来,可能包含也可能不包含逗号,如下所示:

"'apples,bananas','lemons'"

我想把它拆分成一个数组

["apples,bananas", "lemons"]

显然,如果我 split(',') 我得到的字符串

[ "'apples", "bananas'", "lemons" ]

我不明白。我想出的唯一方法是

a = []
s = "'apples,bananas','lemons'"
s.scan(/\'([^\']+)\'/){|i| a << i[0]}

# result is ["apples,bananas", "lemons"]

但是还有更优雅的方式吗?是否有我没有得到的 split 方法导致奇怪的结果?

【问题讨论】:

    标签: ruby split csv


    【解决方案1】:

    实际上 split 正在按照它应该的方式工作。但似乎您正在尝试拆分逗号分隔的值。并且在 Ruby 的 stdlib 中已经有一个解决方案:

    http://www.ruby-doc.org/stdlib/libdoc/csv/rdoc/index.html

    或者,如果您想要一个外部库(应该更好、更快……),请使用FasterCSV

    【讨论】:

    • CSV 库似乎很有帮助。如果将字符串格式化为 s = "\"apples,bananas\", lemons" (使用转义的双引号而不是单引号),我可以执行 CSV::parse_line(s) 并获得所需的结果。这可能是一个可能的解决方案。
    • 至少使用 FasterCSV,您可以解析现有字符串而无需重新格式化。需要'fastercsv'; "'apples,bananas','lemons'".parse_csv(:quote_char => "'") 产生 ["apples,bananas", "lemons"],我相信这就是您要找的。​​span >
    【解决方案2】:

    #split 的结果是完全正常的,该方法不应该以任何方式标记字符串。选择你知道的方式,而不是优雅的方式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-06
      相关资源
      最近更新 更多