Как извлечь подстроку из строки с помощью регулярного выражения? - PullRequest
7 голосов
/ 27 апреля 2011

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

13 голосов
/ 27 апреля 2011
str="http://www.site.com/media/pool/product_color_purple.jpg"
colour = str.match(/color_([^\/.]*).jpg$/)
puts "Colour is #{colour[1]}"

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

3 голосов
/ 27 апреля 2011
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 голосов
/ 27 апреля 2011

Без 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]
0 голосов
/ 27 апреля 2011

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

/color_(.*)?.jpg/
0 голосов
/ 27 апреля 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...