2011-01-03 3 views
0

Я хотел бы разобрать текст и разделить его на задачи и подзадачи:Разбивает строку многократного регулярного выражения в Руби

'Asubsubsubtask:Bsubtask:Ctask:D'.split(/((sub)*task)\:/i) 
#=> ["A", "subsubsubtask", "sub", "B", "subtask", "sub", "C", "task", "D"] 

Последняя часть результирующего массива не соответствует и не позволяет мне используйте #each_slice(3), обрабатывая массив.

Что вы предлагаете мне использовать вместо сопоставления каждого элемента массива с похожим регулярным выражением?

EDIT1:

Более подробный пример:

Task: Main 
description 
Defaults: some params 

Subtask: Basic 
description 
Options: A B C 

Subsubtask: Reading 
description 
Parameters: some params 

и я стараюсь, чтобы разделить его на /^((sub)*task)\:/i

ответ

1

Разделить его на две split звонки:

irb(main):007:0> 'Asubsubsubtask:Bsubtask:Ctask:D'.split(':').collect{|s| s.split(/((sub)*task)/i)} 
=> [["A", "subsubsubtask", "sub"], ["B", "subtask", "sub"], ["C", "task"], ["D"]] 
+0

@marcog, спасибо ! В моем тексте есть другие ключевые слова, которые я хотел бы проанализировать после разделения на задачи. Общая форма '/^([a-z]) \:/i' – Andrei

+0

@Andrei Где другие ключевые слова? Приведу пример. – marcog

+0

@marcog, Просто сделал это. Пожалуйста, ознакомьтесь с обновленным вопросом! Я думаю, что лучше разбивать 'task', а затем каждый из них на' (sub) * task' - тогда проблема решается. – Andrei

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