2014-11-06 2 views
0

Я импортирую данные из старых таблиц в базу данных с использованием рельсов.Подавить разделители в строке Ruby # split

У меня есть один столбец, который содержит список на каждой строке, что иногда отформатированный в

first, second 

и другие времена, как этот

third and fourth 

Так что я хотел бы разделить эту строку в массив, ограничивающий запятую или слово «и». Я попытался

my_string.split /\s?(\,|and)\s?/ 

К сожалению, как говорят документы:

Если шаблон содержит группы, соответствующие матчи будут возвращены в массиве, а также.

Это означает, что я получаю обратно массив, который выглядит как

[ 
[0] "first" 
[1] ", " 
[2] "second" 
] 

Очевидно только нулевой и второй элементы полезны для меня. Что вы рекомендуете как самый лучший способ добиться того, что я пытаюсь сделать?

+3

Используйте '(?: ...)' для группировки без захвата. – Stefan

+0

Вы также можете просто удалить оскорбительные разделители 'mystring.gsub (/ (, | и) /, '') .split'. – ptd

+0

@ptd Тогда не было бы возможности рассказать разницу между разделительными элементами. Почему бы не заменить запятую и разделитель запятой, а затем запустить раскол? – nikkon226

ответ

3

Вы можете указать регулярному выражению, чтобы не захватить группу, используя ?:.

my_string.split(/\s?(?:\,|and)\s?/) 
# => ["first", "second"] 

Как и в сторону отметить

в базу данных с использованием рельсов.

Обратите внимание, что это не имеет ничего общего с Rails, это Ruby.

+0

Я рад, что вы предоставили Ruby-only решение, но я упомянул Rails, потому что Rails-only был бы приемлемым. – Dan

+0

Что случилось с совпадением ''first, second'.scan (/^[^, \ s] + | \ S + $ /)'? –

+0

@AvinashRaj пользователь упомянул, что строки иногда содержат запятую, а другие - AND. –

Смежные вопросы