繁体   English   中英

如何使用c#查找字符串(A)是否存在于另一个字符串(B)中?

[英]How do I find if a string(A) exists in another string(B) using c#?

在将此标记为重复之前,请在此处阅读详细信息。

范例1:

String A: The seven habits of highly effective people.

String B: "This is a sample text. There is only one product in it. It is a book. The book is The seven habits of highly effective people."

范例2:

String A: The seven habits of highly effective people.

String B: "This is a sample text. There is only one product in it. It is a book. The book is The seven habits of highly effective peopl."

现在使用类似的代码来解决上述示例
B.Contains(A)
会给出正确的结果。 但是,相同的代码将返回“ false”作为示例2中的输出。

我该如何解决这个问题?

示例2中缺少一个“ e”,我知道它,这就是问题所在。 我如何比较一个字符串与另一个字符串,其中字符串A与“字符串B的一部分”几乎相同?

如我的评论所述。Levenshtein距离算法(和类似算法)计算字符串之间的差异并返回数值结果(Wiki: http : //en.m.wikipedia.org/wiki/Levenshtein_distance )。

但是,我肯定会对这些算法应用基准测试和缓存策略。 他们用少量输入就可以了..但是当我实现它时,我必须确保我缓存结果/查找。 您的大型示例将不会执行“快速” ..取决于您的用例是什么“快速”。

您可以使用string.compare ,在下面找到一些可能对您有所帮助的示例。

string a = "a"; 
string b = "b"; 
int c;

c = string.Compare(a, b);
Console.WriteLine(c);

c = string.CompareOrdinal(b, a);
Console.WriteLine(c);

c = a.CompareTo(b);
Console.WriteLine(c);

c = b.CompareTo(a);
Console.WriteLine(c);

您正在寻找的东西看起来像是带有分数率的搜索引擎。

我使用了Levenshtein距离方法来搜索/比较看起来相同但不相似的字符串。

以下链接中有一个示例:

http://www.dotnetperls.com/levenshtein

我在回答我自己的问题。

我一直在寻找一种解决方案,将一个字符串与另一个字符串进行比较,其中字符串A与“ 字符串B的一部分几乎相同

这就是我解决问题的方式。

  1. 我应用了“ 最长公共子串 ”算法,并在两个字符串之间建立了最长公共子串。

  2. 然后,我使用“ Levenshtein距离算法”将我的字符串A与从步骤1中找到的“最长公共子字符串”进行比较。

  3. 如果步骤2中提到的算法可获得的结果高于某个阈值,则表明字符串A存在于字符串B中。

  4. 问题解决了

我已经在问题上工作了一天,并且发现了不错的结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM