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