[英]Replace “\\” with “\” in a string in C#
我仍然不明白如何做到這一點。 我看到很多關於這個的帖子,但沒有一個解決方案對我有用。
我有一個名為“a\\\\b”的字符串。 我需要的結果是“a\\b”。 這是怎么做的?
我有一個文本文件,其中有一個數據庫連接字符串指向一個名為 - Server\\DbInstance 的實例
我的目標是在文本文件中進行字符串替換——用另一個值替換“Server\\DbInstance”,比如“10.11.12.13, 1200”。
所以我有:
stringToBeReplaced = @"Server\DbInstance";
newString = @"10.11.12.13, 1200";
這就是問題開始的地方。 我的 stringToBeReplaced 將始終為“Server\\\\DbInstance”,當我在文本文件中搜索此字符串時,搜索失敗,因為文本文件沒有字符串“Server\\\\DbInstance”; 相反,它只有“Server\\DbInstance”。 那么如何將“Server\\\\DbInstance”改為“Server\\DbInstance”呢?
我懷疑您的字符串實際上已經只包含一個反斜杠,但是您正在調試器中查看它,該調試器將它轉義為一種形式,該形式可以作為 C# 中的常規字符串文字有效。
如果在控制台或消息框中打印出來,它顯示的是兩個反斜杠還是一個?
如果您真的想用單個反斜杠替換雙反斜杠,這樣做很容易:
text = text.Replace(@"\\", @"\");
...但我的猜測是原始文件無論如何都不包含雙反斜杠。 如果這沒有幫助,請提供更多詳細信息。
編輯:為了回應編輯的問題,您的stringToBeReplaced
只有一個反斜杠。真的。 無論你在哪里看到兩個反斜杠,那個觀眾都在逃避它。 字符串本身沒有兩個反斜杠。 檢查stringToBeReplaced.Length
並計算字符數。
萬一有人遇到這個問題並且上面的答案都不起作用,下面是對我有用的。 希望能幫助到你。
var oldString = "\\r|\\n";
// None of these worked for me
// var newString = oldString(@"\\", @"\");
// var newString = oldString.Replace("\\\\", "\\");
// var newString = oldString.Replace("\\u5b89", "\u5b89");
// var newString = Regex.Replace(oldString , @"\\", @"\");
// This is what worked
var newString = Regex.Unescape(oldString);
// newString is now "\r|\n"
我嘗試了您帖子的程序,但沒有成功。
這是我從調試器中得到的:
我保存到 sqlite 數據庫中的原始字符串是b\\r\\na
.. 當我閱讀它們時,我得到b\\\\r\\\\na
(調試器中的長度為 6: "b" "\\" "\\r" "\\" "\\n" "a"
) 然后我嘗試替換這個字符串,我再次得到長度為 6 的字符串(你可以在上圖中看到)。
我在我的測試表單中運行這個簡短的腳本,只有一個文本框:
private void Form_Load(object sender, EventArgs e)
{
string x = "b\\r\\na";
string y = x.Replace(@"\\", @"\");
this.textBox.Text = y + "\r\n\r\nLength: " + y.Length.ToString();
}
我在文本框中得到了這個(所以,“b”和“a”之間沒有換行符:
b\r\na
Length: 6
我可以用這個字符串做什么來取消反斜杠? (我期待“b”和“a”之間的新線。)
解決方案:
好的,這不可能用標准替換來完成,因為\\r
和\\n
是一個字符。 可以逐個字符地替換字符串的一部分,但不能替換一個字符的“一半”。 所以,我必須單獨替換任何特殊字符,如下所示:
private void Form_Load(object sender, EventArgs e) {
...
string z = x.Replace(@"\r\n", Environment.NewLine);
...
這對我產生了正確的結果:
b
a
我遇到了同樣的問題,直到我讀到 Jon Skeet 關於調試器顯示單個反斜杠和雙反斜杠的答案,即使字符串可能有一個反斜杠。 我不知道。 所以我改變了我的代碼
text2 = text1.Replace(@"\\", @"/");
到
text2 = text1.Replace(@"\", @"/");
這解決了問題。 注意:我正在連接和 R.Net,它在路徑字符串中使用單個正斜杠。
Regex.Unescape(string) 方法轉換輸入字符串中的任何轉義字符。
Unescape 方法執行以下兩種轉換之一:
它通過從 Escape 方法轉義的每個字符中刪除轉義字符 ("\\") 來反轉 Escape 方法執行的轉換。 其中包括 \\、*、+、?、|、{、[、(,)、^、$、.、# 和空格字符。 此外,Unescape 方法對右方括號 (]) 和右大括號 (}) 字符進行轉義。
它將逐字字符串文字中的十六進制值替換為實際的可打印字符。 例如,它將@"\\x07" 替換為"\\a",或將@"\\x0A" 替換為"\\n"。 它轉換為受支持的轉義字符,例如 \\a、\\b、\\e、\\n、\\r、\\f、\\t、\\v 和字母數字字符。
string str = @"a\\b\\c";
var output = System.Text.RegularExpressions.Regex.Unescape(str);
參考:
嘗試 -
var newstring = @"a\\b".Replace(@"\\",@"\");
接受的解決方案有效,但我選擇了下面的實現。 我還意識到我引用了錯誤的路徑。 請務必檢查您正在使用的路徑。
@"C:\Users\me\path"
string a = @"a\\b";
a = a.Replace(@"\\",@"\");
應該管用。 請記住,在 Visual STudio 手表中,“\\”已轉義,因此您會看到“\\”代替了單個字符。
你可以簡單地在你的字符串中做一個替換
Str.Replace(@"\\",@"\");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.