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

C#动态正则表达式匹配:处理空格与连字符的字符串变体

解决方案

要适配空格、连字符与无分隔符的变体匹配,只需修改正则表达式的构建逻辑,让输入中的分隔符可以匹配目标字符串里的空格、连字符或无分隔的情况,具体代码修改如下:

// 先将输入中的空格和连字符替换为临时标记,避免转义正则语法
string tempProduct = product.ToLower().Replace(" ", "@@SEP@@").Replace("-", "@@SEP@@");
// 转义字符串中的正则特殊字符(如.、*等)
string escapedTemp = Regex.Escape(tempProduct);
// 将临时标记替换为可匹配空格、连字符或无的正则片段
string patternPart = escapedTemp.Replace("@@SEP@@", "[ -]?");
// 构建带单词边界的匹配模式,避免部分匹配
string pattern = $@"\b{patternPart}\b";

foreach (string s in titles)
{
    if (Regex.IsMatch(s, pattern, RegexOptions.IgnoreCase))
    {
        return p;
    }
}

逻辑说明

  1. 临时标记替换:先把输入里的空格、连字符换成@@SEP@@,防止后续正则转义破坏我们要构建的匹配规则。
  2. 特殊字符转义:对处理后的字符串做正则转义,确保输入中的特殊字符(如.、*)不会被当成正则语法解析。
  3. 替换为匹配规则:把@@SEP@@替换成[ -]?,这个片段的意思是:允许匹配0个或1个空格或连字符,完美覆盖三种变体情况。
  4. 单词边界匹配:保留原代码的\b单词边界,确保匹配的是完整的目标片段,避免出现类似BKIII123被误判为匹配BKIII的情况。

示例效果

  • 输入BK III时,生成的正则是\bBK[ -]?III\b,可匹配BKIII、BK III、BK-III。
  • 输入BK-III时,生成的正则同样是\bBK[ -]?III\b,效果一致。
  • 如果需要支持多个连续分隔符(如BK III),只需把[ -]?改成[ -]*即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 20:39:56