Ruby 如何使用正则表达式从字符串中提取子字符串?
我不熟悉Ruby中的正则表达式 字符串看起来像Ruby 如何使用正则表达式从字符串中提取子字符串?,ruby,regex,Ruby,Regex,我不熟悉Ruby中的正则表达式 字符串看起来像http://www.site.com/media/pool/product_color_purple.jpg我正试图从中提取具有颜色的位。这可能是一个可变长度,因为有些颜色类似于prince\u purple.jpg 因此,我: colour = c.attr('src').match(/(.*)color_(.*).jpg/) puts "Colour is #{colour}" 颜色返回的是字符串,而不是提取的位,即颜色。这里出了什么问题?您
http://www.site.com/media/pool/product_color_purple.jpg
我正试图从中提取具有颜色的位。这可能是一个可变长度,因为有些颜色类似于prince\u purple.jpg
因此,我:
colour = c.attr('src').match(/(.*)color_(.*).jpg/)
puts "Colour is #{colour}"
颜色返回的是字符串,而不是提取的位,即颜色。这里出了什么问题?您可以试试这个正则表达式
>> 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"]
/color_(.*)?.jpg/
不使用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]
或
您不会得到“color is purple”,因为match返回MatchData,而不是string
match
返回MatchData
,“mtch[0]相当于特殊变量$&,并返回整个匹配的字符串。mtch[1],mtch[2]等等返回匹配的反向引用的值”-您的链接已断开。最好在这里展示你想展示的东西。
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
str="http://www.site.com/media/pool/product_color_purple.jpg"
colour = str.match(/color_([^\/.]*).jpg$/)
puts "Colour is #{colour[1]}"