0

In c#, how could I turn literally "\\b" into literally "\b", assuming I did not know the last character, the characters after or if there were any characters in front of the escaped ones, or multiple escaped characters?

4

3 に答える 3

1

私はあなたの正確な要件を100%確信していませんが、あなたに取り掛かるには、RegexUnescapeを使用"\\b"してみることができます。"\b"

var foo = @"\\b"; //The @ is important if you wish to keep things literal 
var bar = System.Text.RegularExpressions.Regex.Unescape(foo);
于 2013-02-06T09:52:32.383 に答える
0

「\b」の前にある文字を知らなければ、これを行うことはできません。

この特定のケースでは"\b"、エスケープ シーケンス'\\'が として読み取られるため、この文字列は として解析され'\'ます。

ただし、"\"先行する別の があれば"\\b"、別の結果が得られます。

たとえば、はと"\\\b"の 2 つの文字として解析されます。"\""\b"

これはあなたの質問に直接答えるものではありませんが、C# の逐語的な文字列リテラルに慣れていない場合は、それらを調べることをお勧めします。@ 記号を先頭に付けることで、文字列リテラルをそのままの文字列リテラルとしてマークできます。これは、エスケープ シーケンス (二重引用符を除く) を無視し、文字列をそのまま解析するようにコンパイラに指示します。

于 2013-02-05T17:44:45.507 に答える
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))
于 2013-02-05T17:52:15.410 に答える