2010-07-09 2 views
1

У меня есть строка, которую я хочу разбить: D017209D019169D019014 в D017209, D019169 и D019014 с запятыми между ними.Легкое разделение струн?

Если у меня есть

a = D017209D019169D019014 
b = a.slice("D") 
puts b 

Мой результат выглядит следующим образом:

017209 
019169 
019014 

Что мне не хватает?

+0

Функция разделения строк всегда удаляет терминатор. Вы хотите подстроки, начинающиеся с «D». Регулярное выражение было бы лучше всего, но, честно говоря, я использую их так редко, что я позволю кому-то еще предложить ответ на случай, если я сделаю ошибку (нет времени на тестирование) –

+0

Общее правило: используйте 'split', когда вы знаете, что вы хотите выбросить, используйте регулярное выражение, когда знаете, что хотите сохранить. –

ответ

5
"D017209D019169D019014".scan(/D[^D]*/) 

Сканирование возвращает массив всех совпадений, что именно то, что вы хотите здесь. Регулярное выражение просто означает D, за которым следует ноль или более не-D.

+1

Добавить добавление добавляется в запятую "D017209D019169D019014" .scan (/ D [^ D] * /). Join (",") дает "D017209, DD019169, DD019014" –

0

Функция разделения строк всегда удаляет терминатор. Вы хотите подстроки, начинающиеся с «D». Регулярное выражение будет лучше здесь

a.scan(/D[0-9]*/).each do |line| 
    #do stuff with each piece of data 
end 

BTW, как я уже сказал в своем комментарии я абсолютно НЕ регулярное выражение эксперт, даже не очень хорошо на самом деле. Итак, если кто-то найдет в этом зияющее целое, дайте мне знать, но он должен работать с вашим входом.

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