2010-04-21 89 views
0

我正在寻找一种简单的方法来辨别如果一个字符串包含另一个字符串的任何部分(是正则表达式,内置函数,我不知道,等等。 ..)。例如:字符串不能包含另一个字符串的任何部分.NET 2.0

string a = "unicorn"; 
string b = "cornholio"; 
string c = "ornament"; 
string d = "elephant"; 

if (a <comparison> b) 
{ 
    // match found ("corn" from 'unicorn' matched "corn" from 'cornholio') 
} 

if (a <comparison> c) 
{ 
    // match found ("orn" from 'unicorn' matched "orn" from 'ornament') 
} 

if (a <comparison> d) 
{ 
    // this will not match 
} 

if (a.ContainsAnyPartOf(b))这样的东西将是太多的希望。

另外,我只能访问.NET 2.0。

提前致谢!

+0

来自独角兽的“o”与cornholio中的“o”匹配吗? – 2010-04-21 13:14:55

+0

所以'a'和'd'不匹配,即使它们都包含子字符串'“n”'? – 2010-04-21 13:15:00

回答

5

这种方法应该可以工作。您需要为可能匹配的“零件”指定最小长度。我假设你想寻找至少2点的东西,但是可以根据需要设置它的高低。注意:错误检查不包括在内。

public static bool ContainsPartOf(string s1, string s2, int minsize) 
{ 
    for (int i = 0; i <= s2.Length - minsize; i++) 
    { 
     if (s1.Contains(s2.Substring(i, minsize))) 
      return true; 
    } 
    return false; 
} 
+0

完美。我希望在.NET中会有一些东西,但是它的工作原理也一样! – Aaron 2010-04-21 13:20:24

0

您的要求有点含糊。

您需要为匹配定义一个最小长度......但是当您指出该部分时,实现算法不应太困难。

我建议将字符串分解为字符数组,然后使用尾递归来查找部件的匹配。

1

根据我对问题的理解,最好的办法是计算出Levenshtein(或相关值)的距离并将其与阈值进行比较。

相关问题