这是我需要完成的一个例子,作为更大程序的一部分。该示例包含两个listView。 listViewInput包含三个文本项:“banana”,“banana tree”和“banana peel”。
我需要遍历listView项目并找到字符串textToCompare中包含完全的项目。 textToCompare将在我正在寻找的实际字符串的一侧或两侧始终有额外的文本(不会是==的东西)。
此比较的问题是If语句将为listView项“banana”以及“banana tree”返回true。这看起来很简单,但我已经尝试了所有我能想到的并且没有运气的东西。任何帮助将不胜感激。
string textToCompare = "word banana tree more words";
for (int i = 0; i < listViewInput.Items.Count; i++)
{
if (Regex.IsMatch(textToCompare, listViewInput.Items[i].Text))
{
listViewOutput.Items.Add(listViewInput.Items[i].Text);
}
}
答案 0 :(得分:2)
好的,这是你修改后的答案,返回最大的匹配:
// This is the equivalent to your `listViewInput.Item`
string[] words = new string[] { "banana", "banana tree" , "banana peel"};
string textToCompare = "word banana tree more words";
string longest_match =
(from word in words.OrderByDescending(w => w.Length)
where textToCompare.Contains(word)
select word).FirstOrDefault();
这将以longest_match
持有“香蕉树”结束。
不确定为什么需要正则表达式...使用包含,并将我的单词数组更改为您的商品来源。
答案 1 :(得分:0)
我不做c#但是在算法上你需要两次通过。第二遍虽然会降低成本的对数。
我认为你必须:
listViewInput
textToCompare
进行比较。您可以使用正则表达式,但请确保它使用单词边界。 TextToCompare
中删除该项以进行下一次迭代。 e..g删除“香蕉树”。稍后在排序列表中的某个地方“banana”将无法匹配string textToCompare = "word banana tree more words";
for (int i = 0; i < listViewInput.Items.Count; i++)
{
string regex = `\b'+listViewInput.Items[i].Text[i]+'\b` // e.g. `\bbanana\b`
if (Regex.IsMatch(textToCompare,regex ))
{
listViewOutput.Items.Add(listViewInput.Items[i].Text);
}
}