2013-02-05 40 views
0

在c#中,我怎麼能把字面上的"\\b"轉換爲字面意思"\b",假設我不知道最後一個字符,後面的字符或者是否有任何字符在轉義字符前面或多個轉義字符?「Rechapturing」轉義字符

+0

Unicode轉義序列有多個字符呢? – SLaks

回答

1

我不完全確定您的具體要求,但要將"\\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); 
0

如果不知道「\ b」之前出現的字符,則無法做到這一點。

在這種特殊情況下,該字符串將被解析爲"\b",因爲轉義序列'\\'被讀爲'\'

但是,如果在"\\b"前面有另一個"\",則會得到不同的結果。

例如,"\\\b"將被解析爲兩個字符:"\""\b"

這並不直接回答你的問題,但如果你不熟悉C#中的逐字字符串文字,你可能需要查看它們。您可以將字符串文字標記爲逐字符字符串文字,方法是用@符號對其進行預處理。這告訴編譯器忽略轉義序列(除了雙引號)並且完全按照原樣解析字符串。

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)) 
+0

你的正則表達式是接近的,但我必須使用長手的方法出於各種原因..'encoded = Regex.Replace(encoded,@「\\。」,delegate(Match m){return m.Value.Substring( 1);});'是非常接近的,因爲它消除了雙重轉義,但是單個斜線不會被替換。 使用'@「\\\\。」'找不到任何匹配,或者找到並替換爲雙重轉義(即不會更改) – Izzy