2011-01-03 4 views
0

Je voudrais analyser le texte et les séparer en tâches et sous-tâches:découpant une chaîne par une regex répétée dans Ruby

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

La dernière partie du tableau de résultat ne concorde pas et ne me permet pas de utilisez #each_slice(3) pour traiter le tableau.

Que me suggérez-vous d'utiliser au lieu de faire correspondre chaque élément du tableau avec une regex similaire?

EDIT1:

exemple plus détaillé:

Task: Main 
description 
Defaults: some params 

Subtask: Basic 
description 
Options: A B C 

Subsubtask: Reading 
description 
Parameters: some params 

et je tente de le diviser par /^((sub)*task)\:/i

Répondre

1

séparée en deux: split appels

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, merci ! Il y a d'autres mots-clés dans mon texte, que je voudrais analyser après la division en tâches. Forme générale '/^([a-z]) \:/i' – Andrei

+0

@Andrei Où sont les autres mots-clés? S'il vous plaît donner un exemple. – marcog

+0

@marcog, vient de le faire. S'il vous plaît, voir la question mise à jour! Je pense que je ferais mieux de diviser par 'task' et ensuite chacun d'eux par' (sub) * task' - alors le problème se résout. – Andrei