regex

2012-05-08 17 views
4

を使用してclojureコレクションから文字列を抽出すると、文字列シーケンスから部分文字列を抽出するための最短かつ簡単な方法を提案できますか?私は、特定のWebページからコンテンツを取るenliveフレームワークを使用してからこのコレクションを取得し、ここで私は結果として取得していますものですよ。私が望む何regex

("background-image:url('http://s3.mangareader.net/cover/gantz/gantz-r0.jpg')" 
"background-image:url('http://s3.mangareader.net/cover/deadman-wonderland/deadman-wonderland-r0.jpg')" 
"background-image:url('http://s3.mangareader.net/cover/12-prince/12-prince-r1.jpg')") 

からURLを抽出するにはいくつかの助けを得ることですsequence.iの各文字列は、パーティション関数を使って何か試しましたが、成功しませんでした。誰もが正規表現、またはこの問題のための他のアプローチを提案することができますか?

ありがとうございました

答えて

5

re-seq to the resque!

(map #(re-seq #"http.*jpg" %) d) 
(("http://s3.mangareader.net/cover/gantz/gantz-r0.jpg") 
("http://s3.mangareader.net/cover/deadman-wonderland/deadman-wonderland-r0.jpg") 
("http://s3.mangareader.net/cover/12-prince/12-prince-r1.jpg")) 
user> 

re-findにも優れています:

user> (map #(re-find #"http.*jpg" %) d) 
("http://s3.mangareader.net/cover/gantz/gantz-r0.jpg" 
"http://s3.mangareader.net/cover/deadman-wonderland/deadman-wonderland-r0.jpg" 
"http://s3.mangareader.net/cover/12-prince/12-prince-r1.jpg") 

それは、配列の余分なレイヤを追加していないため。

+0

こんにちは、素晴らしいソリューション、ありがとうトン!ちなみに、私はそれらに絡み合わなければならないたびに助けを求めることを避けるために、私はclojureの正規表現のチュートリアルをお勧めしますか? –

+0

私はそれを見つけることも大好きです、誰ですか? –

+0

私が考えることができる最も良いことは '(find-doc#"^re - ")'を呼び出して結果を読むことです。私は何か良いことは知らない。 – Retief

2

この作品のような単純なものはありますか?

(defn extract-url [s] 
    (subs s (inc (.indexOf s "'")) (.lastIndexOf s "'"))) 

この関数は、最初と最後の単一引用符の間のすべての文字を含む文字列を返します。文字列のあなたの順序をss命名されたと仮定すると、

は、次のようになります。

(map extract-url ss) 
;=> ("http://s3.mangareader.net/cover/gantz/gantz-r0.jpg" 
; "http://s3.mangareader.net/cover/deadman-wonderland/deadman-wonderland-r0.jpg" 
; "http://s3.mangareader.net/cover/12-prince/12-prince-r1.jpg") 

これは間違いなく、一般的なソリューションではありませんが、それはあなたが提供した入力に適合します。

+0

うん、それは魅力のように働く。私はこれが正規表現によってよりエレガントに行えると思いましたが、これは私のようなOOの人にとってより包括的です。おかげで –