2011-06-21 29 views
1

の評価の部分はのは、私が絵の前にテキストのブロックをつかむ表現し、最初の二つの絵を書きたい正規表現:表現

sometext= "text text picture 1 picture 2 text text"

としましょう。場合によっては写真は1枚しかありませんが、5枚も可能です。

私の最初の試みは

parsed = sometext.scan(/picture.*?(picture.*?(?=picture))

だった。しかし、文、その後場合はRubyは正規表現をサポートしていないことが表示されます。

[私はそれがより明確にするためにこの質問を編集しました。ここで

+1

期待どおりの入力と出力を追加できますか? – Dogbert

+0

sometext = "text goodtext picture 1 text text"結果は "goodtext picture 1"です。 – victorkhugo

+0

したがって、単語があります。 「画像」は5回まで続きますか? – Dogbert

答えて

0

は、ここで私がやって巻き取るものです。コードの1行で全体のチャンクをつかみ、それを配列に貼り付けました。

var = sometext.scan(/goodtext.*?endofsection/m)

次に、別の行で、チャンクから配列を作成しました。私は見出しが最初で、未定の数の写真が続くことを知っているので、配列を3つの項目に制限します。

var = var.collect{|x| x.scan(/heading|image).slice(0..2)}

私は、私は必要のないもの、他のものを出しGSUBことで、この多くを洗練する必要がありますが、私はこれが私の基準を満たすことになると思います。他の誰かがこれを行うもっとエレガントな方法を考えることができるなら、私はそれのためにすべてです。

3

は、同じ結果を与えるすべてが様々なソリューション、以下のとおりです。

ids = sometext.scan(/picture (\d+)/).flatten.map(&:to_i) 
ids = sometext.scan(/(picture (\d+))/).map{ |str,id| id.to_i } 
ids = sometext.scan(/(picture (\d+))/).map(&:last).map(&:to_i) 
p ids 
#=> [1, 2]