2016-10-09 110 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

?这将与我的算法一起工作。事实上,搜索字符串将有三个匹配,并可能是第一个。 标记正确的解决方案甚至找不到它... –