“夺回”逃脱角色

时间:2013-02-05 17:32:52

标签: c#

在c#中,如果我不知道最后一个字符,后面的字符或者在转义字符前面是否有任何字符,我怎么能按字面意思"\\b"转换为字面"\b",或者多个转义字符?

3 个答案:

答案 0 :(得分:1)

我不能100%确定您的确切要求,但要将"\\b"降至"\b",您可以尝试使用Regex Unescape。

var foo = @"\\b"; //The @ is important if you wish to keep things literal 
var bar = System.Text.RegularExpressions.Regex.Unescape(foo);

答案 1 :(得分:0)

如果不知道“\ b”之前出现的字符,就无法做到这一点。

在这种特殊情况下,此字符串将被解析为"\b",因为转义序列'\\'被读取为'\'

但是,如果"\"之前还有另一个"\\b",则会得到不同的结果。

例如,"\\\b"将被解析为两个字符:"\""\b"

这并不直接回答您的问题,但如果您不熟悉C#中的逐字字符串文字,则可能需要查找它们。您可以通过在@符号前面添加字符串文字作为逐字字符串文字。这告诉编译器忽略转义序列(doublequotes除外)并完全按原样解析字符串。

答案 2 :(得分:0)

简单的String.Replace就足够了:

var source = @"foo\\bbar";
var result = source.Replace(@"\\b", @"\b")

如果你不知道“b”部分 - 使用Replace的正则表达式版本,它允许你检查匹配本身:

var result = Regex.Replace(source, @"\\\\.", 
       match => match.Value .Substring(1))