我是Ruby中正则表达式的新手。
字符串看起来像http://www.site.com/media/pool/product_color_purple.jpg
,我试图从中提取出具有颜色的位。这可以是可变长度,因为一些颜色类似于prince_purple.jpg
。
所以我有:
colour = c.attr('src').match(/(.*)color_(.*).jpg/)
puts "Colour is #{colour}"
再次返回的是字符串,而不是提取的位,即颜色。这里出了什么问题?
答案 0 :(得分:13)
str="http://www.site.com/media/pool/product_color_purple.jpg"
colour = str.match(/color_([^\/.]*).jpg$/)
puts "Colour is #{colour[1]}"
你没有得到“颜色是紫色”,因为匹配返回MatchData,而不是字符串
答案 1 :(得分:3)
url="http://www.site.com/media/pool/product_color_purple.jpg"
color = url.scan(/color_(.*).jpg/)[0][0]
#=> purple
或
url="http://www.site.com/media/pool/product_color_purple.jpg"
color = url.match(/color_(.*).jpg/)[1]
#=> purple
答案 2 :(得分:2)
没有Regexp作为另一种方式的例子
url="http://www.site.com/media/pool/product_color_purple.jpg"
color = url[url.rindex("_")+1..-1].split(".")[0]
为此,我会坚持使用regexp。
color = url.match(/.*_(.*)\./)[1]
答案 3 :(得分:0)
>> s = %w(http://www.site.com/media/pool/product_color_purple.jpg http://www.site.com/media/pool/product_color_prince_purple.jpg)
#=> ["http://www.site.com/media/pool/product_color_purple.jpg", "http://www.site.com/media/pool/product_color_prince_purple.jpg"]
>> s.map { |c| c.match(/\w*_color_(\w+).jpg/)[1] }
#=> ["purple", "prince_purple"]
答案 4 :(得分:0)
你可以试试这个正则表达式。
/color_(.*)?.jpg/