繁体   English   中英

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

[英]How do I extract a substring from string using a regular expression?

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

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

str="http://www.site.com/media/pool/product_color_purple.jpg"
colour = str.match(/color_([^\/.]*).jpg$/)
puts "Colour is #{colour[1]}"

您没有得到“颜色为紫色”,因为匹配返回 MatchData,而不是字符串

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

没有正则表达式作为另一种方法的例子

url="http://www.site.com/media/pool/product_color_purple.jpg"
color = url[url.rindex("_")+1..-1].split(".")[0]

为此,我会坚持使用正则表达式。

color = url.match(/.*_(.*)\./)[1]
>> 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/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM