说我有List<string> colors
List<string> colors = new List<string> { "red", "blue", "yellow"};
我有一个我想搜索的字符串。
string myString = "There is a red apple";
我想检查myString是否包含列表中的任何内容并返回搜索。
在这种情况下,程序应在控制台中找到"red"
并输出"red"
。
我能够使用Any()
检查包含部分,但是如何返回结果?
colors.Any(myString.Contains); //this only returns a bool I believe
上面我使用的方法是中途,我怎样才能得到实际结果?
- 编辑 -
可以安全地假设myString
最多只包含colors
中的1,并且匹配将始终为全字匹配。
答案 0 :(得分:4)
您可以Split
在空白处填充字符串,然后使用Enumerable.Intersect
,如:
var matching = colors.Intersect(myString.Split());
以上内容会返回matching
中的一个项目,即red
如果您希望不区分大小写,则可以执行以下操作:
var matching = colors.Intersect(myString.Split(),
StringComparer.InvariantCultureIgnoreCase);
编辑:如果您正在寻找部分匹配或多个单词匹配,那么您可以这样做:
List<string> colors = new List<string> { "red", "red apple", "yellow", "app" };
string myString = "There is a red apple";
var partialAllMatched =
colors
.Where(r => myString.IndexOf(r, StringComparison.InvariantCultureIgnoreCase) >=0);
这会让你回头:
red
red apple
app
答案 1 :(得分:0)
或者您可以使用:
var result = colors.FindAll(myString.Contains);
这将返回一个包含输出的数组。
答案 2 :(得分:0)
我建议你尝试使用正则表达式进行搜索。
使用或运算符和每种颜色构建搜索模式。像这样的东西“(红色|蓝色|黄色)”。不确定模式是否与正则表达式语法匹配,但你明白了。
然后在下一步中让正则表达式使用您的模式并尝试将其与提供的文本匹配。在您的情况下,文本是myString。
以下是一个例子:
class TestRegularExpressions
{
static void Main()
{
string[] sentences =
{
"C# code",
"Chapter 2: Writing Code",
"Unicode",
"no match here"
};
string sPattern = "code";
foreach (string s in sentences)
{
System.Console.Write("{0,24}", s);
if (System.Text.RegularExpressions.Regex.IsMatch(s, sPattern, System.Text.RegularExpressions.RegexOptions.IgnoreCase))
{
System.Console.WriteLine(" (match for '{0}' found)", sPattern);
}
else
{
System.Console.WriteLine();
}
}
// Keep the console window open in debug mode.
System.Console.WriteLine("Press any key to exit.");
System.Console.ReadKey();
}
}
/* Output:
C# code (match for 'code' found)
Chapter 2: Writing Code (match for 'code' found)
Unicode (match for 'code' found)
no match here
*/
答案 3 :(得分:0)
没有看到LINQ Enumerable.Where的使用,所以这里是:
var colors = new[] {"red", "blue", "white", "black"};
const string str = "There is a red apple with black rocket.";
var foundWords = colors.Where(str.Contains).ToList();