You need to enable JavaScript to run this app. C# 正则表达式无法匹配.h文件中_TARGET_VERSION赋值行问题求助
优惠活动
大模型
产品
解决方案
定价
更多

C# 正则表达式无法匹配.h文件中_TARGET_VERSION赋值行问题求助

问题原因
  • 核心错误是启用了RegexOptions.IgnorePatternWhitespace选项:该选项会忽略正则表达式中所有未转义的空白字符,你写在正则里等号两侧的空格会被正则引擎直接丢弃,实际生效的匹配规则是_TARGET_VERSION=\$\(_TARGET_VERSION_GREEN\),和目标文本中等号带空格的格式完全不匹配。
  • 次要隐患:普通字符串的多层转义写法容易出错,C#中更推荐用带@前缀的逐字字符串写正则,只需要给正则引擎做一层转义即可,避免转义计数混乱。
修正方案

两种修改方式任选其一即可:

方式1:删除不需要的RegexOptions.IgnorePatternWhitespace选项

该选项一般用于带注释、格式化拆分的长正则场景,你的正则很短完全不需要开启,直接移除即可匹配成功,修正后代码如下:

static void Main(string[] args)
{
    // 也可换成逐字字符串写法更易读:@"(_TARGET_VERSION = \$\(_TARGET_VERSION_GREEN\))"
    var expr = "(_TARGET_VERSION = \\$\\(_TARGET_VERSION_GREEN\\))";
    var repl = "!if 0\n$1\n!endif";

    var content = File.ReadAllText("fixme.h");
    // 仅保留需要的配置,当前场景没有用^/$匹配行首行尾,Multiline也可以直接去掉
    var searchOptions = RegexOptions.Multiline;
    var matched = Regex.Match(content, expr, searchOptions);
    if (matched.Success)
    {
        var newContent = Regex.Replace(content, expr, repl, searchOptions);
        File.WriteAllText("fixed.h", newContent);
    }
}

方式2:保留选项则转义正则中的空格

如果你确实需要保留RegexOptions.IgnorePatternWhitespace,就需要把正则中需要匹配的空格转义,或者用\s匹配空白字符,正则修改为:

// 逐字字符串写法,\s兼容空格、制表符等空白字符,+可兼容多空格场景
var expr = @"(_TARGET_VERSION\s+=\s+\$\(_TARGET_VERSION_GREEN\))";

内容的提问来源于stack exchange,提问作者B.McKee

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 08:54:08