2

我正在对一些转义字符串进行匹配比较:

Regex.IsMatch("\\Application.evtx", "DebugLogs\\ConfigurationServices.log");

我不明白为什么我得到:

“解析“DebugLogs\ConfigurationServices.log” - 无法识别的转义序列 \C。”

\C逃跑了吗?

4

3 回答 3

4

编辑真的骗了很多人,包括我!

'\' 是正则表达式中的一个特殊字符——它实际上是一个转义字符或表示一个转义序列

因此,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"); 

也可以正常工作并且更具可读性。

于 2012-05-03T08:10:39.720 回答
1

\字符是字符串中的转义字符。例如,如果您想要回车,您可以使用\r. 为了解决这个问题,要么使用文字字符串

@"\Application.evtx"

或转义转义字符

"\\Application.evtx"
于 2012-05-02T22:07:51.347 回答
-2

你可能想要

Regex.IsMatch(@"\Application.evtx", @"DebugLogs\ConfigurationServices.log");

如果没有“@”,C# 会将 \C 视为转义序列,类似于将 \n 转换为换行符的方式,但是 \C 不是公认/有效的转义序列。

于 2012-05-02T22:08:26.977 回答