2014-09-16 3 views
0

Я имею дело с файлом экспорта, который содержит поле примечания в экспортированном CSV-файле. Экспортируемые заметки выглядят так.Ruby .split (различные разделители) содержат разделители в матрице совпадений

«AC) Dianne - # или код, набранный неверно. AC) dianne - # или код, набранный неверно. WDB) Dianne - Wrong Number. AC) Dianne - # или код, набранный неверно."

В этом поле у ​​нас есть пользователь, который оставил записку и собственно записку.

Разделители в файлах «AC)» или «WDB)»

мне нужно написать это как:

AC) Dianne - # or code dialed is incorrect. 
AC) dianne - # or code dialed is incorrect. 
WDB) Dianne - Wrong Number. 
AC) Dianne - # or code dialed is incorrect. 

Используя регулярные выражения и функции рубиновый .split я могу выход текст, следующий за разделителем, но я теряю пользователя, который записал заметки.

Рубин

notes.split(/AC\)|WDB\)/).each do |n| 
    puts n 
end  

Выход

Dianne - # or code dialed is incorrect. 
dianne - # or code dialed is incorrect. 
Dianne - Wrong Number. 
Dianne - # or code dialed is incorrect. 

В коде выше я понятия не имею, кто пользователь (AC, WDB), который оставил отдельную ноту.

Я не уверен, что мне нужно переключиться на .scan, изменить регулярное выражение (т. Е. Включить lookbehind) и т. Д. Кто-нибудь знает, как я могу захватить пользователя и текст, чтобы они выглядели так ?

Выходной

AC) Dianne - # or code dialed is incorrect. 
AC) dianne - # or code dialed is incorrect. 
WDB) Dianne - Wrong Number. 
AC) Dianne - # or code dialed is incorrect. 

ответ

4

Просто разделить входной сигнал в соответствии с приведенной ниже опережающего просмотра,

(?=AC\)|WDB\)) 

Lookarounds равны нулю ширины утверждения. Он не будет соответствовать ни одному символу, но он использовался для проверки состояния.

Код:

> "AC) Dianne - # or code dialed is incorrect. AC) dianne - # or code dialed is incorrect. WDB) Dianne - Wrong Number. AC) Dianne - # or code dialed is incorrect.".split(/(?=AC\)|WDB\))/) 
=> ["AC) Dianne - # or code dialed is incorrect. ", "AC) dianne - # or code dialed is incorrect. ", "WDB) Dianne - Wrong Number. ", "AC) Dianne - # or code dialed is incorrect."] 
+0

Это сделал трюк для меня. – helloJello

+0

Добро пожаловать :-) –

0

Вы можете попробовать это -

notes.gsub!(/\s+((?:AC\))|(?:WDB\)))/, '\n\1') 

проверить регулярное выражение here

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