2011-01-03 2 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 

나는 두 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