Regex.Unescape:ArgumentException

时间:2014-09-05 16:44:03

标签: c# regex escaping argumentexception

我一直在努力解决这个问题已经有一段时间了,谷歌搜索无法提供太多帮助。我的字符串包含“有效”和“无效”转义序列,如此,

str1 = "love\u007c\u000B\n";  // Valid escape sequences
str2 = "title=\x22\t\n";     // Invalid escape sequences. Insufficient hexadecimal digits
str3 = "\love\007c\u000B\n"; // Invalid escape sequences. Unrecognized escape sequences.    

当我使用方法Regex.Unescape(str1);时,我得到了我正在寻找的结果,即"love|"
使用Regex.Unescape(str2);,我得到了ArgumentException: Insufficient hexadecimal digits,但我实际需要的是title=\x22。 使用Regex.Unescape(str3);,我得到ArgumentException: Unrecognized escape sequence \l,但我实际需要的是\love|

我的问题是,如何处理包含有效和无效转义序列的字符串,以便在有效序列被适当的字符文字替换时忽略任何无效的转义序列。任何代码片段或链接都非常有用。

1 个答案:

答案 0 :(得分:0)

C# regular string个文字和verbatim string文字中。我猜你的经验是常规字符串文字不是预期的表示。在引用的字符串之前使用@符号为您提供逐字文字类型:

string str1 = @"love\u007c\u000B\n";
string str2 = @"title=\x22\t\n";
string str3 = @"\love\007c\u000B\n";

看看MSDN上的简短String Literals explanation - 它应该对文字的明显差异以及如何/在何处使用每种风味有所了解。