ruby-list
本質的に正則言語の処理なので、あんまり簡単には書けないでしょう。使えるツールは正規表現かRaccくらいだと思います。
個人的には、状態遷移図を描いて有限状態オートマトンをプログラムするのが良いと思います。
def parse(lines) p = 0 stat = 0 while true p = p+1 if p >= lines.length then return end l = lines[p] case stat when 0 if l = "Title1" stat = 1 end when 1 if l = "Title2" stat = 2 end when 2 if l = "Title3" stat = 0 else puts l end end end end
stateパターンを使えばもっときれいに書けるでしょうし、状態遷移図からプログラムを生成するようにすれば*1メンテナンスも比較的容易でしょう。
これなら、スタックが必要になっても書き足せば良いだけなので、正規表現を利用するより拡張が楽だと思います。(正規表現でいけると思ったら、実はスタックが必要だった、なんてことがあったりなかったりしますし)
*1:あるいは逆