2013-11-02 269 views
0

我想用正則表達式替換一個字符串,但是我似乎無法找到一種方法來爲字符串的雙反斜槓正則表達式轉義單反斜槓。轉義單斜槓和雙斜槓

我的字符串文字(這是正在從文本文件閱讀,因爲是)

-s \"t\" 

,我想有(再次,作爲一個字符串)替換它

-s \"n\" 

的最好的我已經能夠拿出是

schedule = Regex.Replace(schedule, "-s\s\\\"\w\\\"", "-s \\\"n\\\""); 

雖然中間的參數不編譯,因爲單一e和雙反斜槓。它會接受一個或另一個,但不能同時接受(不管我使用@的天氣)。

我不使用那麼多的正則表達式,所以它可能是一個簡單的,但我很堅持!

感謝

回答

2

的問題發生,因爲\有兩個字符串和正則表達式特殊的含義,因此通常需要進行雙轉義,除非您使用@並加入到這裏的問題是"本身內部存在需要轉義的字符串。

嘗試以下操作:

schedule = Regex.Replace(schedule, @"-s\s\\""\w\\""", @"-s \""n\"""); 

使用@後,\沒有字符串內一個特殊的意義,但它仍然有正則表達式表達式中有特殊的意義,因此需要進行一次,如果逃脫這是字面上需要的。

而且現在你需要使用""逃脫"字符串內(你會怎麼逃脫它,否則,因爲\不具有特殊的意義了)

+0

對不起,那也不編譯。 –

+0

@BaliC我剛剛編輯了我的答案,請檢查編輯。 –

+0

謝謝,這是絕對找到它,但它取代了一個額外的斜槓,被替換的字符串是'-s \\「n \\」' –

1

這工作:

var schedule = @"-s \""t\"""; 
// value is -s \"t\" 
schedule = Regex.Replace(schedule, @"-s\s\\""\w\\""", @"-s \""n\"""); 
// value is -s \"n\" 

逃逸是複雜的,因爲\"兼得你如何編碼在C#和正則表達式中的字符串中的特殊含義。搜索模式是(沒有任何轉義)C#字符串-s\s\\"\w\\",它告訴正則表達式尋找文字\和文字"。替換字符串是-s \"n\",因爲您不需要在替換字符串中轉義反斜槓。

你可以,當然,正常的字符串("..."),而不是逐字字符串(@"...")寫這篇文章,但它會得到方式混亂。

+0

謝謝蒂姆,這很有道理,有一天我將不得不學習這些東西! –