如何按顺序检查字符串中的单词
本文关键字:单词 字符串 检查 何按 顺序 | 更新日期: 2023-09-27 18:12:52
我的代码是这样的
string order = "Im sending you big apples x100";
string[] fruits = { "apples", "big apples", "oranges" };
string[] vegetables = { "tomatoes", "carrots", "cucumber" };
string[] words = order.Split();
if (fruits.Any(w => words.Contains(w)))
{
//do things here
}
if (vegetables.Any(w => words.Contains(w)))
{
//do things here
}
我想要能够找到取决于顺序字符串到底是什么,如果它是可能的,现在在我的情况下,当字符串数组有2个单词的序列,这个代码不工作,我怎么能做到当我的字符串数组有2个单词。我想找到只有如果它有"大苹果",我知道我可以做它只有"苹果",但我想找到顺序字符串中的序列词。
如果您正在搜索子字符串,则不需要将order
字符串拆分为单个单词。您可以使用String.Contains
的方法(此处将words.Contains
替换为order.Contains
)。
if (fruits.Any(w => order.Contains(w)))
{
//do things here
}
if (vegetables.Any(w => order.Contains(w)))
{
//do things here
}
如果你的搜索可以不区分大小写,你可以使用IndexOf
方法。
if(fruits.Any(w => order.IndexOf(w, StringComparison.OrdinalIgnoreCase) >= 0))
{
//do things here
}
if (vegetables.Any(w => order.IndexOf(w, StringComparison.OrdinalIgnoreCase) >= 0))
{
//do things here
}
根据注释,这将匹配字的子字符串(例如apple
将匹配apples
)。如果必须是完整的单词,那么你可以在Govind Kumar的答案中使用regex
(看起来是从这个答案中复制的)。你可以这样使用它:
var fruitWords = fruits.Select(w => @"'b" + Regex.Escape(w) + @"'b");
var fPattern = new Regex("(" + string.Join(")|(", fruitWords) + ")");
var fruitMatch = fPattern.IsMatch(order);
var vegWords = fruits.Select(w => @"'b" + Regex.Escape(w) + @"'b");
var vPattern = new Regex("(" + string.Join(")|(", vegWords) + ")");
var vegMatch = vPattern.IsMatch(order);
if(fruitMatch)
{
//fruit matched
}
if(vegMatch)
{
//veg matched
}
var escapedWords = words.Select(w => @"'b" + Regex.Escape(w) + @"'b");
var pattern = new Regex("(" + string.Join(")|(", escapedWords) + ")");
var q = pattern.IsMatch(myText);
这将允许您循环遍历每种水果,然后检查其值。既然你已经有了一个使用Lambda语法的方法,我想我应该分享一个非Lambda版本!
foreach (var fruit in fruits)
{
if (order.contains(fruit))
{
//do things here
}
}
foreach (var veg in vegetables)
{
if (order.contains(veg))
{
//do things here
}
}