簡體   English   中英

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM