我有一个服装网站的链接列表,我按性别使用关键字对其进行分类。根据他们所处的网站,他们都有不同的URL结构,例如......
www.website1.com/shop/womens/tops/tshirt
www.website2.com/products/womens-tshirt
我不能使用.include?方法因为无论是.include?(“mens”)还是.include?(“womens”),它都会返回true。我怎么能有一个只为“女性”返回true的方法(反之亦然)。我怀疑它可能是某种正则表达式,但我对这些相对缺乏经验,并且不同的URL结构使它变得更加棘手。非常感谢任何帮助,谢谢!
答案 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