遇到无法识别的转义序列时继续取消转义

时间:2015-09-10 19:52:52

标签: c# regex

我有一个处理一些提供数据的系统。

在存储数据之前,我是这样的字符:

Regex.Unescape(text);

我遇到了一堆ArgumentException: <str> includes an unrecognized escape sequence,因为有些数据包含如下文字: \m/\o/甚至¯\_(ツ)_/¯

有什么方法可以忽略无法识别的序列并继续逃避其余的输入?

1 个答案:

答案 0 :(得分:2)

当您的字符串来自未知来源时,您不能依赖Regex.Unescape。请参阅MSDN reference

  

Unescape无法完美地反转转义后的字符串,因为它无法准确推断出哪些字符被转义。

由于

  

它通过从方法转义的每个字符中删除转义字符("\")来反转Escape方法执行的转换。其中包括\*+?|{[()^$.#和空格字符。此外,Unescape方法取消了右括号(])和右括号(})字符。

  

它用字符本身替换不可打印字符的表示。例如,它将\a替换为\x07。它替换的字符表示形式为\a\b\e\n\r\f\t和{ {1}}。

您可以模仿\v喜欢

Regex.Unescape

请参阅regex demo

如果var unescaped = Regex.Replace(input, @"\\([\\*+?|{}[\]()^$. #])", "$1"); \*+?|,{{1}中有转义字符},{[()^$.#设置后,反斜杠将被删除。