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

本文关键字:继续 取消 转义 转义序列 识别 遇到 | 更新日期: 2023-09-27 18:12:07

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

在存储数据之前,我像这样对字符进行转义:

Regex.Unescape(text);

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

是否有任何方法可以忽略无法识别的序列并继续转义其余的输入?

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

当字符串来自未知来源时,您不能依赖Regex.Unescape。参见MSDN参考:

Unescape不能完全反转转义字符串,因为它不能准确地推断出转义了哪些字符。

以来

它通过从该方法转义的每个字符中删除转义字符("'")来反转由Escape方法执行的转换。这些字符包括'*+?|{[()^$.#和空白字符。此外,Unescape方法对右括号(])和右括号(})字符进行反转义。

用字符本身替换不可打印字符的表示。例如,将'a替换为'x07。它所替换的字符表示为'a'b'e'n'r'f't'v

您可以像

那样模拟Regex.Unescape
var unescaped = Regex.Replace(input, @"''([''*+?|{}[']()^$. #])", "$1");

参见regex demo

如果在'*+?|{[()^$.#}]集合中存在转义字符,反斜杠将被删除。