Нахождение точных слов в строке - PullRequest
2 голосов
/ 05 января 2012

У меня есть список ссылок на сайты, посвященные одежде, которые я классифицирую по полу, используя ключевые слова.В зависимости от того, для какого веб-сайта они предназначены, все они имеют разные структуры URL, например ...

www.website1.com / shop / womens / tops / tshirt

www.website2.com/products/womens-tshirt

Я не могу использовать .include?метод, потому что независимо от того, является ли он .include? ("mens") или .include? ("womens"), он вернет true.Как я могу иметь метод, который будет возвращать true только для «женщин» (и наоборот).Я подозреваю, что это может быть своего рода регулярное выражение, но я относительно неопытен с ними, и различные структуры URL делают его еще более сложным.Любая помощь очень ценится, спасибо!

Ответы [ 4 ]

16 голосов
/ 05 января 2012

Канонический способ регулярного выражения заключается в поиске по границам слов:

pry(main)> "foo/womens/bar".match(/\bwomens\b/)
=> #<MatchData "womens">
pry(main)> "foo/womens/bar".match(/\bmens\b/)
=> nil
pry(main)> "foo/mens/bar".match(/\bmens\b/)
=> #<MatchData "mens">
pry(main)> "foo/mens/bar".match(/\bwomens\b/)
=> nil

При этом достаточно либо разделения, либо поиска по ведущему "/".

11 голосов
/ 05 января 2012

Если вы впервые проверите для women, он должен работать:

# assumes str is not nil
def gender(str)
  if str.include?("women")
    "F"
  elsif str.include?("men") 
    "M"
  else
    nil
  end
end

Если это не то, что вы ищете, пожалуйста, объясните вашу проблему более подробно.

1 голос
/ 05 января 2012

Вы можете разделить с помощью / и проверить на равенство строк в компоненте (ах), который вы хотите - нет необходимости в регулярном выражении там

0 голосов
/ 05 января 2012
keyword = "women"
url = "www.website1.com/shop/womens/tops/tshirt"
/\/#{keyword}/ =~ url 
=> 21
keyword = "men"
url = "www.website1.com/shop/womens/tops/tshirt"
/\/#{keyword}/ =~ url 
=> nil
keyword = "women"
url = www.website2.com/products/womens-tshirt
/\/#{keyword}/ =~ url 
=> 25
keyword = "men"
url = www.website2.com/products/womens-tshirt
/\/#{keyword}/ =~ url 
=> nil

Тогда просто сделайте !!:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...