You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#:如何检查List<Fields>对象值是否包含字符串数组任意词汇

实现包含目标词汇的短语匹配逻辑

问题背景

现有代码仅能匹配Value与urgentWords数组中词汇完全相等的情况,无法匹配Value是包含目标词汇的短语(如"Urgent ABC XYZ"、"review ASAP")的场景,需要调整匹配逻辑。

解决方案1:子串匹配(宽松匹配)

直接检查Value是否包含数组中的任意词汇(忽略大小写),修改后的代码如下:

var UrgentText = data.Fields
    .Where(x => x.Name.Equals("urgent", StringComparison.InvariantCultureIgnoreCase) 
             && urgentWords.Any(word => x.Value.IndexOf(word, StringComparison.InvariantCultureIgnoreCase) >= 0))
    .Count();

关键改动说明:

  • 将x.Name.ToLower() == "urgent"替换为x.Name.Equals("urgent", StringComparison.InvariantCultureIgnoreCase),无需额外做大小写转换,更高效且避免文化差异问题。
  • 用urgentWords.Any(...)替代原有的Contains逻辑:遍历紧急词汇数组,通过IndexOf检查Value是否包含当前词汇(忽略大小写),只要有一个匹配即符合条件。

解决方案2:完整单词匹配(严格匹配)

如果需要避免部分匹配(比如防止"Urgent"匹配"UrgentXYZ"或"XUrgent"),可以使用正则表达式匹配完整单词:

// 预先构建匹配完整单词的正则表达式集合
var urgentRegexes = urgentWords
    .Select(word => new Regex($@"\b{Regex.Escape(word)}\b", RegexOptions.IgnoreCase))
    .ToList();

var UrgentText = data.Fields
    .Where(x => x.Name.Equals("urgent", StringComparison.InvariantCultureIgnoreCase) 
             && urgentRegexes.Any(regex => regex.IsMatch(x.Value)))
    .Count();

关键改动说明:

  • \b表示单词边界,确保匹配的是独立的目标词汇;Regex.Escape用于转义词汇中的特殊字符,避免正则语法冲突。
  • RegexOptions.IgnoreCase保证忽略大小写匹配,符合需求。

内容的提问来源于stack exchange,提问作者krishna mohan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 00:38:22