Как разделить одинарные кавычки значениями, разделенными запятыми, содержащими запятые в Ruby - PullRequest
0 голосов
/ 04 мая 2009

Допустим, у меня есть строка со значениями, разделенными запятыми, заключенными в одинарные кавычки, которые могут включать или не включать запятые, например:

"'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, которое я не получаю, что вызывает странный результат?

Ответы [ 2 ]

6 голосов
/ 04 мая 2009

На самом деле сплит работает так, как должен. Но похоже, что вы пытаетесь разделить запятые значения. И уже есть решение для этого в stdlib Руби:

http://www.ruby -doc.org / STDLIB / libdoc / CSV / RDoc / index.html

Или, если вам нужен внешний libray (который должен быть лучше, быстрее ...), используйте FasterCSV .

2 голосов
/ 04 мая 2009

Результат #split совершенно нормален, метод не должен каким-либо образом токенизировать строку. Выберите способ, которым вы знаете, что он работает над элегантным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...