如何按顺序检查字符串中的单词

本文关键字:单词 字符串 检查 何按 顺序 | 更新日期: 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
        }
     }