2011-01-03 10 views
0

で繰り返し正規表現によって文字列:分割私はテキストを解析し、タスクとサブタスクに分離したいRubyの

'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 

と私は2つのsplit通話に分離/^((sub)*task)\:/i

答えて

1

ことによってそれを分割しよう:

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、ちょうどそれをやった。更新された質問をご覧ください。私は「タスク」で分割し、それぞれを「(サブ)*タスク」で分割したほうが良いと思います。問題が解決します。 – Andrei