Inc*_*ito 1 c# string string-matching string-search
所以我的代码看起来像这样
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
}
Run Code Online (Sandbox Code Playgroud)
我希望能够找到依赖于顺序字符串的确切内容,如果可能的话,现在在我的情况下,当字符串数组有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
}
Run Code Online (Sandbox Code Playgroud)
如果您的搜索可以是大小写,则可以使用该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
}
Run Code Online (Sandbox Code Playgroud)
根据评论,这将匹配单词的子串(例如apple将匹配apples).如果它必须是完整的单词,那么你可以使用regexGovind Kumar的答案(看起来是从这个答案中复制过来的).你会这样使用它:
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
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3520 次 |
| 最近记录: |