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

C#中使用@后正则仍报“Unrecognized escape sequence \_”错误排查

解决C#正则中“Unrecognized escape sequence _”的报错问题

我太懂这种挫败感了——明明在正则测试工具上跑的顺顺当当,一挪到C#里就报错,简直让人挠头😅。咱们来一步步拆解问题:

核心原因:正则引擎的转义规则差异

你遇到的问题本质是不同正则引擎对转义字符的处理逻辑不一样:

  • 下划线_在正则里属于普通字符,不管是哪个引擎都不需要转义。你在测试工具里写的\_可能是误加了转义,或者工具默认的引擎(比如JavaScript)对这种无效转义比较宽容,不会报错。
  • 但在C#的.NET正则引擎里,\后面必须跟着一个合法的转义目标(比如\d匹配数字、\.匹配点号)。当它看到\_时,会认为你试图转义一个不需要转义的字符,直接抛出“未识别的转义序列”错误——哪怕你加了@逐字字符串也没用,因为@只是让C#编译器不解析字符串里的转义,正则引擎本身还是会按自己的规则处理正则语法。

快速解决步骤

  1. 清理无效转义:把正则表达式里所有的\_直接替换成_就行,因为下划线在.NET正则里不需要转义。
    比如:

    • 错误写法:@"foo\_bar"
    • 正确写法:@"foo_bar"
  2. 如果需要匹配字面量\_:要是你的需求是匹配文本中真实存在的\+_组合(比如字符串里的\test_code),那你需要在正则里把反斜杠转义(因为反斜杠本身是正则的特殊字符),写法是:

    // 匹配字面量的\_
    var regex = new Regex(@"\\_");
    

避坑小技巧

以后在写C#的正则时,直接在测试工具里切换到**.NET引擎**(别用默认的JavaScript),这样你写的正则语法能直接适配C#,提前避免这类跨引擎的转义问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:19:26