Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 遇到无法识别的转义序列时继续取消转义_C#_Regex - Fatal编程技术网

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));