![](/img/trans.png)
[英]How to match a string in array, regardless of the string size in Ruby
[英]Ruby match string in array
我有一個這樣的字符串: "Men's Beech River Cable T-Shirt"
如何從該字符串中獲得類別?
str = "Men's Beech River Cable T-Shirt"
str2 = "MEN'S GOOSE EYE MOUNTAIN DOWN VEST"
cat1 = str1.split.last # T-Shirt
cat2 = str2.split.last # VEST
TOPS = %w(jacket vest coat blazer parka sweater shirt polo t-shirt)
所需結果:
category_str1 = "Tops" # Since T-Shirt (shirt) is in TOPS constant.
category_str2 = "Tops" # Since vest is in TOPS const.
我不知道如何更好地描述我的問題,希望您從提供的示例中理解它。
str = "Men's Beech River Cable T-Shirt"
cat_orig = str.split.last # T-Shirt
TOPS = %w(jacket vest coat blazer parka sweater shirt polo)
RE_TOPS = Regexp.union(TOPS)
category = "Tops" if RE_TOPS =~ cat_orig.downcase
請注意,%w()樣式數組語法中沒有逗號。
最好的方法是通過散列而不是數組。 假設您的分類看起來像這樣
categories = { "TOPS" => ["shirt", "coat", "blazer"],
"COOKING" => ["knife", "fork", "pan"] }
然后,我們可以遍歷每個類別,查找它們的值是否包含字符串中的單詞
categories.each do |key, value|
puts key if str.downcase.split(' ').any? { |word| categories[key].include?(word) }
end
遍歷每個類別,並查找類別中是否包含該字符串包含的單詞。
注意:這尚未搜索子字符串。
str = "Men's Beech River Cable T-Shirt"
cat_orig = str.split.last # T-Shirt
TOPS = %w(jacket vest coat blazer parka sweater shirt polo) # suppressed the comma to get a clean array
category = "Tops" if !cat_orig[/(#{TOPS.join("|")})/i].nil?
TOPS Array上的聯接構建了以下形式的替代正則表達式:
(jacket|vest|coat|blazer|parka|sweater|shirt|polo)
如果cat_orig中存在這些單詞中的任何一個,則返回值將為匹配的單詞,否則將返回nil。
注意正則表達式中的前導i使其不區分大小寫。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.