我有一个处理一些提供数据的系统。
在存储数据之前,我是这样的字符:
Regex.Unescape(text);
我遇到了一堆ArgumentException: <str> includes an unrecognized escape sequence
,因为有些数据包含如下文字:
\m/
或\o/
甚至¯\_(ツ)_/¯
。
有什么方法可以忽略无法识别的序列并继续逃避其余的输入?
答案 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}中有转义字符},{
,[
,(
,)
,^
,$
,.
和#
设置后,反斜杠将被删除。