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

C#判断文本含紧急列表词且不含非紧急列表短语的问题排查

问题分析与修复

核心问题

你的代码返回不符合预期的结果,主要源于语法错误和逻辑偏差:

  1. 语法错误导致代码无法正确执行或判断逻辑失效
  2. 现有逻辑只要文本包含任意非紧急短语就直接返回No,忽略了文本中可能存在独立紧急词汇的情况(比如测试案例1中的URGENT)

代码中的具体错误

  • 紧急列表里的immediately未加引号,属于语法错误
  • wordDelimiters定义与使用不匹配(变量名少了s),且用空字符串分割会把每个字符拆成单独元素,完全无法正确提取单词
  • string.Contains的大小写忽略写法错误,正确写法应为mydata.Contains(x, StringComparison.OrdinalIgnoreCase)(.NET Core 2.1+支持)或使用IndexOf判断
  • 逻辑错误:只要文本包含非紧急短语就返回No,不符合测试案例中“存在独立紧急词汇时仍返回Yes”的预期

修正后的代码

根据你的测试案例和需求(文本包含紧急列表词汇,且存在未被非紧急短语包含的紧急词汇时返回Yes),修正后的代码如下:

var urgentList = new List<string>()
{
    "Urgent",
    "Immediate",
    "immediately"
};

var nonUrgentList = new List<string>()
{
    "Important information: urgent send",
    "notice immediately",
    "Important notice: urgent ",
    "immediately send it back"
};

// 拆分文本为单词(按空白字符分割,去除空项)
var words = mydata.Split(new[] { ' ', '\t', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries);

// 判断是否存在紧急词汇,且该词汇未被任何非紧急短语包含
bool hasValidUrgentWord = words.Any(word => 
    urgentList.Contains(word, StringComparer.OrdinalIgnoreCase) &&
    // 检查该紧急词汇是否不在任何文本中存在的非紧急短语里
    !nonUrgentList.Any(phrase => 
        phrase.IndexOf(word, StringComparison.OrdinalIgnoreCase) >= 0 &&
        mydata.IndexOf(phrase, StringComparison.OrdinalIgnoreCase) >= 0)
);

string indicator = hasValidUrgentWord ? "Yes" : "No";

逻辑说明

  1. 正确拆分文本为独立单词,避免字符级别的无效分割
  2. 对于每个紧急词汇,检查两个条件:
    • 文本中存在该紧急词汇
    • 该词汇没有出现在任何文本中存在的非紧急短语里
  3. 只要存在一个符合条件的紧急词汇,就返回Yes,否则返回No

测试案例验证

  • 测试案例1:文本包含URGENT(不在任何非紧急短语中),同时包含immediately send it back(非紧急短语),此时URGENT符合条件,返回Yes
  • 测试案例2:文本中没有任何紧急词汇,返回No

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 21:32:50