在字符串中查找确切的单词

时间:2012-01-05 16:26:06

标签: ruby-on-rails ruby regex ruby-on-rails-3

我有一个服装网站的链接列表,我按性别使用关键字对其进行分类。根据他们所处的网站,他们都有不同的URL结构,例如......

  

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

     

www.website2.com/products/womens-tshirt

我不能使用.include?方法因为无论是.include?(“mens”)还是.include?(“womens”),它都会返回true。我怎么能有一个只为“女性”返回true的方法(反之亦然)。我怀疑它可能是某种正则表达式,但我对这些相对缺乏经验,并且不同的URL结构使它变得更加棘手。非常感谢任何帮助,谢谢!

4 个答案:

答案 0 :(得分:16)

规范正则表达式的方法是搜索单词边界:

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

也就是说,分裂或使用前导"/"进行搜索可能就足够了。

答案 1 :(得分:11)

如果您首先检查women它应该有效:

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

如果这不是您想要的,请更详细地解释您的问题。

答案 2 :(得分:1)

您可以使用/进行拆分并检查所需组件的字符串相等性 - 不需要正则表达式

答案 3 :(得分:0)

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

然后只需要!!

=> !!nil => false
=> !!25 => true