2014-03-27 56 views
1

我在程序中卡住了轉義序列。c中的轉義字符#

我從單引號中的xml文件獲取輸入。

所以在字符串中它可能包含任何轉義序列。

所以我想要做的就是將轉義字符後的下一個字符視爲正常字符。

Example: '\abc\\t' 
Output: 'abc\t' 

所以對我創建的正則表達式是:

Regex.Replace(SearchString, @"\\?(?<Character>)", "${Character}"); 

但替換所有轉義字符,並給出輸出:

abct 

請幫幫我,我該怎麼辦呢?

+0

爲什麼不把它作爲文字/逐字字符串,然後使用它? – Hexie

回答

1

在您的正則表達式的命名組匹配無關,所以它一樣Replace(@"\", "")

匹配一個組中的字符:

SearchString = Regex.Replace(SearchString, @"\\(.)", "$1"); 
+0

謝謝。它可以很好地工作,你能告訴我如何理解並創建正則表達式?我發現正則表達式非常棘手,無法理解所有部分。你能否告訴我我在表達中犯的錯誤? –

+0

它也會將轉義標籤轉換爲't'。示例@「\ t \ tint i; \ r \ n」將轉換爲@「ttint i; rn」。 @LOL那是你在找什麼? – CoperNick

+0

@LOL:學習寫正規表達式是一段漫長的旅程,閱讀它們的時間會更長......毫不奇怪,你覺得它很棘手。您應該能夠找到一些教程來幫助您瞭解基礎知識,然後您可以查看文檔以獲得完整的圖片。關於你的表情,有兩個問題。您已將反斜槓設爲可選項,這意味着它也會匹配不以反斜槓開始的內容,並且您創建了一個只有名稱但不匹配任何內容的組。 – Guffa

0

試試這個:

Regex.Replace(SearchString, @"\\(?<Character>[^\\])", "${Character}"); 
+0

雖然有效,但它會替換字符串中的每個字符,而不僅僅是轉義字符。 – Guffa

+0

是的,我意識到了錯誤。現在編輯我的帖子。 –

+0

您不應該使用'[^ ​​\\]'來匹配字符,以避免匹配\\,所以它將匹配\\ t而不是\\。例如,嘗試字符串'\ abc \\\\ t',其結果是'abc \\\ t'而不是'abc \\ t'。 – Guffa

0

基本上,你需要通過文字解析您的字符串的字符。僞代碼:

Loop through all characters c: 
    If c is escape character: 
     Read next character and do something special (\t is tab, \\ is backslash, ...) 
    Else: 
     Copy character to output 
+0

是的,通常你會這樣做,但在這種情況下,OP不希望逃逸的角色具有特殊的含義。 – Guffa

0

如果你不喜歡什麼:

SearchString = SearchString.Replace(@"\\", @"\"); 

它將給:

\abc\t 

這裏逃出\t現在爲處理「製表符」。

這是你在找什麼?