我试图弄清楚如何在大字符串列表中找到相等的子字符串。
此方法可以正常工作:
var results = myList.FindAll(delegate (string s) { return s.Contains(myString); });
但是它还会查找带有部分单词的子字符串,例如,如果我正在寻找“你愿意”,它还会发现额外的“你不要”,因为其中包含“你愿意..”
在使用字符串的情况下,此方法似乎提供了所需的结果:
bool b = str.Contains(myString);
if (b)
{
int index = str.IndexOf(myString);
}
如何获得与列表的匹配
答案 0 :(得分:2)
您可以使用正则表达式返回所有匹配项,以获取一组可能的条件:
string[] stringsToTest = new [] { "you do", "what" };
var escapedStrings = stringsToTest.Select(s => Regex.Escape(s)); // escape the test strings so that we can safely build them into the expression
var regex = new Regex("\\b(" + string.Join("|", escapedStrings) + ")\\b");
var matches = regex.Matches("How you do? How you don't? What you do? How you do what you do?");
如果只有一个词,可以将其重写为:
var regex = new Regex(string.Format("\\b({0})\\b", Regex.Escape("you do")));
var matches = regex.Matches("How you do? How you don't? What you do? How you do what you do?");
然后您可以使用match.Groups[0]
(对于match集合中的每个组)进行匹配以获取匹配的值:
foreach (Match m in matches)
{
Console.WriteLine(string.Format("Matched {0} at {1}", m.Groups[0].Value, m.Groups[0].Index));
}