Мitke
Мitke

Reputation: 310

Extracting string from clojure collections using regex

can you suggest me the shortest and easiest way for extracting substring from string sequence? I'm getting this collection from using enlive framework, which takes content from certain web page, and here is what I am getting as result:

("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')" )

What I would like is to get some help in extracting the URL from the each string in the sequence.i tried something with partition function, but with no success. Can anyone propose a regex, or any other approach for this problem?

Thanks

Upvotes: 4

Views: 1382

Answers (2)

Arthur Ulfeldt
Arthur Ulfeldt

Reputation: 91607

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 is even better:

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")

because it doesn't add an extra layer of seq.

Upvotes: 5

Jeremy
Jeremy

Reputation: 22435

Would something simple like this work for you?

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

This function will return a string containing all the characters between the first and last single quotes.

Assuming your sequence of strings is named ss, then:

(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")

This is definitely not a generic solution, but it fits the input you have provided.

Upvotes: 2

Related Questions