我正在对一些转义字符串进行匹配比较:
Regex.IsMatch("\\Application.evtx", "DebugLogs\\ConfigurationServices.log");
我不明白为什么我得到:
“解析“DebugLogs\ConfigurationServices.log” - 无法识别的转义序列 \C。”
\C
逃跑了吗?
编辑真的骗了很多人,包括我!
'\' 是正则表达式中的一个特殊字符——它实际上是一个转义字符或表示一个转义序列。
因此,RegEx 引擎会看到 DebugLogs* \C *onfigurationServices.log,这实际上是一个无法识别的转义序列。\A 实际上是一个现有的转义序列。
所以你需要转义转义字符。最简单的方法是将使用的斜杠数量加倍:
Regex.IsMatch("\\\\Application.evtx", "DebugLogs\\\\ConfigurationServices.log");
RegEx 引擎将其视为“\\Appplication.evtx”和“DebugLogs\\ConfigurationServices.log”之间的比较 - 现在反斜杠已被转义并且没有特殊含义。
Regex.IsMatch(@"\\Application.evtx", @"DebugLogs\\ConfigurationServices.log");
也可以正常工作并且更具可读性。
该\
字符是字符串中的转义字符。例如,如果您想要回车,您可以使用\r
. 为了解决这个问题,要么使用文字字符串
@"\Application.evtx"
或转义转义字符
"\\Application.evtx"
你可能想要
Regex.IsMatch(@"\Application.evtx", @"DebugLogs\ConfigurationServices.log");
如果没有“@”,C# 会将 \C 视为转义序列,类似于将 \n 转换为换行符的方式,但是 \C 不是公认/有效的转义序列。