Как мне извлечь подстроку из строки, используя регулярное выражение?

#ruby #regex

#ruby #регулярное выражение

Вопрос:

Я новичок в регулярных выражениях в 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}"
  

Какой цвет возвращает, это снова строка, вместо извлеченного бита, который является цветом. Что здесь происходит не так?

Комментарии:

1. match возвращает MatchData и «mtch[0] эквивалентно специальной переменной $amp; и возвращает всю сопоставленную строку. mtch[1], mtch[2] и так далее возвращают значения соответствующих обратных ссылок» — ruby-doc.org/core/classes/MatchData.html

2. Ваша ссылка не работает. Здесь лучше показать то, что вы хотели показать.

Ответ №1:

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

Вы не получаете «Цвет фиолетовый», потому что match возвращает MatchData, а не string

Ответ №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
  

Ответ №3:

Без регулярного выражения в качестве примера другого способа сделать это

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

Хотя для этого я бы придерживался регулярного выражения.

 color = url.match(/.*_(.*)./)[1]
  

Ответ №4:

 >> 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"]
  

Ответ №5:

Вы можете попробовать это регулярное выражение.

 /color_(.*)?.jpg/