4

你能建议我从字符串序列中提取子字符串的最短和最简单的方法吗?我通过使用 enlive 框架获取此集合,该框架从某些网页获取内容,这是我得到的结果:

("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 时获得一些帮助。我尝试了一些使用分区函数的方法,但没有成功。任何人都可以为这个问题提出一个正则表达式或任何其他方法吗?

谢谢

4

2 回答 2

5

re-seq到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")

因为它不会添加额外的 seq 层。

于 2012-05-08T19:54:04.687 回答
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")

这绝对不是一个通用的解决方案,但它适合您提供的输入。

于 2012-05-08T19:51:49.960 回答