C# 遇到无法识别的转义序列时继续取消转义
我有一个处理提供的一些数据的系统 在存储数据之前,我正在清除如下字符:C# 遇到无法识别的转义序列时继续取消转义,c#,regex,C#,Regex,我有一个处理提供的一些数据的系统 在存储数据之前,我正在清除如下字符: Regex.Unescape(text); 我遇到了一堆ArgumentException:包括一个无法识别的转义序列,因为有些数据包含如下文本: \m/或\o/甚至'\_(ツ)_/' 是否有任何方法可以忽略未识别的序列并继续转义其余的输入?当字符串来自未知源时,您不能依赖Regex.Unescape。请参阅: Unescape无法完全反转转义字符串,因为它无法准确推断转义的字符 自 它通过从该方法转义的每个字符中删除转义
Regex.Unescape(text);
我遇到了一堆ArgumentException:包括一个无法识别的转义序列
,因为有些数据包含如下文本:
\m/
或\o/
甚至'\_(ツ)_/'
是否有任何方法可以忽略未识别的序列并继续转义其余的输入?当字符串来自未知源时,您不能依赖
Regex.Unescape
。请参阅:
Unescape
无法完全反转转义字符串,因为它无法准确推断转义的字符
自
它通过从该方法转义的每个字符中删除转义字符(“\”
)来反转转义方法执行的转换。这些字符包括\
,*
,+
,?
,
,,(
,)
、^
、$
、
、#
和空白字符。此外,Unescape方法取消了右括号(]
)和右大括号(}
)字符的换行
及
它将不可打印字符的表示形式替换为字符本身。例如,它将\a
替换为\x07
。它替换的字符表示形式有\a
,\b
,\e
,\n
,\r
,\f
,\t
,以及\v
您可以像这样模拟Regex.Unescape
var unescaped = Regex.Replace(input, @"\\([\\*+?|{}[\]()^$. #])", "$1");
看
如果从\
,*
,+
,?
,
,{
,[
,(
,)
,^
,$/code>,
,
,,
,
]
set,反斜杠将被删除。或者您首先确保转义字符;将每个“\”替换为“\ \”。主要是使用Regex.Unescape
来取消unicode字符的转义(例如\u0113
)。现在使用Regex.replace
替换:Regex.replace(text,@\[Uu]([0-9A-Fa-f]{.4})”,m=>char.ToString((char)ushort.Parse(m.Groups[1].Value,NumberStyles.allowehexspecifier));