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

如何通过LINQ优雅判断搜索字符串是否为数组字符串的不完整匹配

解决方案

核心思路

我们需要排除数组中所有包含**"ABC HG"后紧跟非空白字符**的字符串(这类属于你定义的“不完整匹配”)。核心步骤:

  1. 标准化搜索输入:把带空格/不带空格的搜索词统一转换成数组中存在的带空格格式(比如ABCHG转成ABC HG)。
  2. 过滤逻辑:检查每个字符串,若包含ABC HG且其后紧跟非空白字符,则排除该字符串;否则保留。

实现方式

方式一:正则表达式(简洁高效)

string[] strings = {
    "This is not ABC HGL",
    "I am going to ABC HGL",
    "What is ABC HGT",
    "Excellent ABC HGU",
    "I like ABC HG" // 符合条件的条目
};

string searchInput = "ABCHG"; // 可替换为"ABC HG"

// 标准化搜索词为带空格格式
string standardSearch = searchInput.Contains(" ") 
    ? searchInput 
    : searchInput.Insert(3, " "); // 针对ABC+HG的固定结构拆分

// 构建正则:匹配"ABC HG"后紧跟非空白字符的模式
var excludePattern = new Regex(Regex.Escape(standardSearch) + @"\S");

// LINQ过滤:排除所有匹配模式的字符串
var result = strings.Where(s => !excludePattern.IsMatch(s)).ToArray();

执行后,result仅保留"I like ABC HG",其余不完整匹配的条目被排除。

方式二:纯字符串操作(无正则依赖)

如果不想依赖正则,可通过字符串索引检查实现:

string[] strings = {
    "This is not ABC HGL",
    "I am going to ABC HGL",
    "What is ABC HGT",
    "Excellent ABC HGU",
    "I like ABC HG"
};

string searchInput = "ABC HG";
string standardSearch = searchInput.Contains(" ") 
    ? searchInput 
    : searchInput.Insert(3, " ");
int searchLen = standardSearch.Length;

var result = strings.Where(s => {
    int index = s.IndexOf(standardSearch);
    while (index != -1)
    {
        int nextIndex = index + searchLen;
        // 检查"ABC HG"后是否有非空白字符
        if (nextIndex < s.Length && !char.IsWhiteSpace(s[nextIndex]))
        {
            return false;
        }
        index = s.IndexOf(standardSearch, index + searchLen);
    }
    return true;
}).ToArray();

说明

  • 标准化步骤确保无论搜索输入带不带空格,都能和数组中带空格的目标字符串对齐。
  • 两种方式都能精准排除“ABC HG”后紧跟其他字符的不完整匹配,只保留完全匹配“ABC HG”(其后无有效字符)的条目。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 16:50:25