2016-10-09 154 views
0

從字符串中搜索子字符串並獲取最匹配的子字符串!字符串比較,返回最相似

string [] allModels = { "Galaxy", "S3", "Galaxy S3" }; 
string title = "Samasung galaxy s3 is for sale"; 
string[] title_array = title.Split(' '); 
string model = ""; 
foreach(var tit in title_array) 
{ 
     foreach(var mod in allModels) 
     { 
      if (mod.Equals(tit, StringComparison.OrdinalIgnoreCase)) 
      { 
        model = mod; 
      } 
     } 
} 

選擇的模式是Galaxy但我需要Galaxy S3(即,最相似)。我怎樣才能得到Galaxy S3

我應該用Array.FindAll(target)的方法嗎?

更新:

通過most similar我指的是子串(模型)相匹配的最從字符串(標題)

例如,在galaxy Samasung s3 is for sale的模式應該是galaxy s3(根據上述allModels陣列)

回答

0

Most similar?不必是Search substrings from a string and get a substring that matches the most!我會假設你想有一個最長匹配...

string[] allModels = { "Galaxy", "S3", "Galaxy S3" }; 
string title = "Samasung galaxy s3 is for sale"; 

var mod = allModels.OrderByDescending(x => x.Length) 
      .FirstOrDefault(x => title.IndexOf(x,StringComparison.OrdinalIgnoreCase)>=0); 
+0

'allModels'不包含'Length'的定義。錯誤 –

+0

@IrfanWattoo正確複製代碼,我沒有使用*長度*作爲'allModels'順便說一下:在發佈之前,我在代碼上面運行:) –

+0

對不起,我的錯誤,如果標題像'galaxy Samasung s3 is for sale' 。在這種情況下代碼將不起作用 –

0

這是一種查找包含標題詞最多的模型的方法。

var allModelsList = new List<String>(allModels); 
var titles = new List<String>(title_array); 
allModelsList.OrderByDescending(model => titles.Where(title => title.Equals(model, StringComparison.OrdinalIgnoreCase)).Count()).FirstOrDefault(); 
+0

請看更新的問題。如果我們不得不從'Samsung Galaxy Neo S5出售'找到'Galaxy S5 Neo',那麼該怎麼辦? –

+0

?這將與我的算法一起工作。事實上,搜索字符串將有三個匹配,並可能是第一個。 標記正確的解決方案甚至找不到它... –