如何在包含另一种颜色的一部分的字符串中查找颜色

时间:2017-12-07 09:04:35

标签: c# asp.net

我正在尝试在包含另一种颜色的一部分的字符串中找到颜色。 即一些字符串将包含玫瑰金,其他字符串将包含黄金或 有时字符串将包含黑色和其他时间Jet Black或Midnight Black。 当我使用CONTAINS关键字时,它随机工作。

Galaxy S8 64GB artic Silver                      Just get Silver
Galaxy S7 edge in Black Onyx 32GB (CPO)          Just get Black
Galaxy S7 edge in Silver Titanium 32GB (CPO)     Just gets Silver
Galaxy S7 edge in Blue Coral 32GB                Just gets Blue
Moto Z2 Play - Fine Gold                         Just gets Gold
iPad Mini 4 32GB in Space Gray                   I got Space Gray oddly enough
iPad Pro (9.7) 32GB in Rose Gold                 I got Rose Gold oddly enough
Galaxy Note 8 in Midnight Black                  I got Midnight Black oddly enough


 sProductDescription = Row["ProductDescription"].ToString().Trim().Replace("  ", " ");
 Products pa = db.Products.Single(p => p.ModelNumber == sModelNumber);
 foreach (string x in SharedFunctions.GetColors())
 {
   if (sProductDescription.ToUpper().Contains(x.ToUpper()))
   {
       pa.Color = x;
   }
 }

public static List<string> GetColors()
{
    List<string> lColors = new List<string>(); 
    lColors.Add("Artic Silver");
    lColors.Add("Black Leather");
    lColors.Add("Black Onyx");
    lColors.Add("Black Sapphire");
    lColors.Add("Black Slate");
    lColors.Add("Black");
    lColors.Add("Blue Coral");
    lColors.Add("Blue");
    lColors.Add("Carbon");
    lColors.Add("Fine Gold");
    lColors.Add("Gold Platinum");
    lColors.Add("Gold");
    lColors.Add("Gray");
    lColors.Add("Green");
    lColors.Add("Grey");
    lColors.Add("Jet Black");
    lColors.Add("Lunar Grey");
    lColors.Add("Midnight Black");
    lColors.Add("Orchid Gray");
    lColors.Add("Pearl");
    lColors.Add("Pink");
    lColors.Add("Platinum");
    lColors.Add("Rose Gold");
    lColors.Add("Silver Titanium");
    lColors.Add("Silver");
    lColors.Add("Slate");
    lColors.Add("Space Gray");
    lColors.Add("Sugar White");
    lColors.Add("Titan");
    lColors.Add("White");
    lColors.Add("Yellow");

    return lColors;
}

1 个答案:

答案 0 :(得分:3)

我制作包含颜色的2个单词列表;基本和高级列表。你的第一个应该包含诸如玫瑰金和#34;和&#34;钛白&#34;例如 - 基本上只是你打算使用的所有颜色都有&#39;名称&#39;。在你的第二个列表中,添加纯颜色的单词,例如&#34; Gold&#34;,&#34; Green&#34;或&#34; Silver&#34;。让程序首先遍历复杂的颜色名称,然后在第一个颜色名称中找不到匹配项。

var complexList = ColourLists.ComplexList;
var simpleList  = ColourLists.SimpleList;
var productName = "iPad Pro(9.7) 32GB in Rose Gold";
var productColour = string.Empty;

foreach(var colour in complexList)
{
    if(productName.Contains(colour, StringComparison.Ordinal))
    {
        productColour = colour;
        break;
    }
}

if(string.IsNullOrEmpty(productColour))
{
    foreach (var colour in simpleList)
    {
        if (productName.Contains(colour, StringComparison.Ordinal))
        {
            productColour = colour;
            break;
        }
    }
}

这将返回您的复杂颜色(在这种情况下,Rose Gold将在第一个foreach循环中找到)。如果没有找到复杂的颜色,那么它将返回一个简单的颜色(假设有一个)。您可以将productName变量设置为直接从模型或对象中提取,而不是像我完成它一样的字符串。