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

C#实现文本子串高亮功能无法匹配子串问题求助

问题根因

你代码的核心问题出在正则表达式的\b元字符约束:\b是单词边界匹配符,仅会匹配单词字符(字母、数字、下划线)与非单词字符的交界位置,因此只有当你要匹配的内容是独立完整单词时才会命中,无法匹配长文本中嵌入的子串。

修复方案

1. 移除正则里的单词边界约束,同时新增特殊字符转义处理

修改RenderResultSubString方法中的正则规则,去掉两侧的\b,同时用Regex.Escape处理输入的子串,避免子串包含.、*等正则特殊字符时出现匹配异常:

public TextGramaticaItemPublic RenderResultSubString(TextGramaticaItemPublic a, string substr) {
    // 移除\b约束,先转义待匹配子串避免正则特殊字符问题
    a.Content = Regex.Replace(a.Content, Regex.Escape(substr), new MatchEvaluator(ReplaceKeyWords), RegexOptions.IgnoreCase);
    return a;        
}

2. 可选:修正大小写匹配不一致问题

你外层遍历的判断逻辑用了a.Content.Contains(word),该方法默认区分大小写,但正则替换用了RegexOptions.IgnoreCase忽略大小写,两者逻辑不一致可能出现部分可被正则匹配的内容漏处理。可以直接去掉外层的if判断,Regex.Replace在无匹配项时不会修改原内容,不会有额外性能损耗。修改后的遍历逻辑:

texts.ForEach((a) =>
{
    RenderResultSubString(a, word);                 
});

如果需要保留预判断优化性能,可以把判断逻辑改为不区分大小写的版本:

texts.ForEach((a) =>
{
    if (a.Content.IndexOf(word, StringComparison.OrdinalIgnoreCase) >= 0)
    {
        RenderResultSubString(a, word);                 
    }
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 16:57:01