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

如何在C#正则表达式中匹配竖线字面量及解决转义报错

解决C#正则匹配竖线(|)字面量的转义问题

嘿,这个问题我之前调试正则的时候也踩过坑,核心是你混淆了C#字符串的转义规则和正则表达式的转义规则,咱们一步步理清楚:

为什么你原来的写法会报错?

你直接写"\|"的时候,C#编译器会先解析这个字符串:它把\当成字符串转义符,但C#里根本没有\|这种合法的转义序列(C#支持的转义符比如\n换行、\"双引号这类),所以自然会抛出“未识别的转义序列”错误——这时候正则表达式还没机会处理你的字符串呢!

而且还要注意:竖线|在正则里是特殊元字符,表示“逻辑或”(比如a|b会匹配a或者b),所以就算你绕过了C#的转义,直接把|丢给正则,它也不会当成字面量匹配,而是执行逻辑或的功能。

正确的两种解决方法

方法1:双重转义(字符串+正则都转义)

因为C#字符串里要表示一个字面量的\,需要写成\\;而正则里要表示字面量的|,需要写成\|。把两者结合起来,就是用"\\|":

using System.Text.RegularExpressions;

string testInput = "Hello|World";
// 匹配竖线字面量
bool containsPipe = Regex.IsMatch(testInput, "\\|");
// 结果会返回true

方法2:使用Verbatim字符串(@前缀)

C#的Verbatim字符串(加@前缀)会忽略字符串内部的转义规则,里面的\会被当成字面量处理。这样你只需要按照正则的要求转义竖线就行,直接写@"\|":

bool containsPipe = Regex.IsMatch(testInput, @"\|");

这种写法更清晰,尤其是正则表达式比较长的时候,能避免一堆重复的\\。

额外验证小技巧

如果你不确定自己写的正则字符串最终被解析成什么,可以直接输出看看:

Console.WriteLine("\\|"); // 输出结果是 \|
Console.WriteLine(@"\|"); // 输出结果也是 \|

这两种写法最终传给正则引擎的都是\|,刚好是匹配竖线字面量需要的正则表达式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:10:08