如何使用正则表达式从字符串中提取子字符串?

时间:2011-04-27 10:01:13

标签: ruby regex

我是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}"

再次返回的是字符串,而不是提取的位,即颜色。这里出了什么问题?

5 个答案:

答案 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/