遇到无法识别的转义序列时,继续取消转义
本文关键字:继续 取消 转义 转义序列 识别 遇到 | 更新日期: 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
如果在'
、*
、+
、?
、|
、{
、[
、(
、)
、^
、$
、.
、#
、}
和]
集合中存在转义字符,反斜杠将被删除。