San*_*eep 37 c# string replace backslash
我仍然不知道如何做到这一点.我看到很多关于此的帖子,但没有一个解决方案适合我.
我有一个名为"a \\ b"的字符串.我需要的结果是"a\b".这是怎么做到的?
我有一个文本文件,其中有一个数据库连接字符串,指向一个名为Server\DbInstance的实例
我的目标是在文本文件中进行字符串替换 - 将"Server\DbInstance"替换为另一个值,例如"10.11.12.13,1200".
所以我有:
stringToBeReplaced = @"Server\DbInstance";
newString = @"10.11.12.13, 1200";
Run Code Online (Sandbox Code Playgroud)
这是问题开始的地方.我的stringToBeReplaced将永远是"Server \\ DbInstance",当我在我的文本文件中搜索此字符串时,搜索失败,因为文本文件没有字符串"Server \\ DbInstance"; 相反,它只有"Server\DbInstance".那么如何将"Server \\ DbInstance"更改为"Server\DbInstance"?
Jon*_*eet 68
我怀疑你的字符串实际上只包含一个反斜杠,但是你在调试器中查看它,它会将它转换为一个在C#中作为常规字符串文字有效的形式.
如果在控制台或消息框中打印出来,是否显示两个反斜杠或一个?
如果你真的想用一个双反斜杠替换一个,我很容易这样做:
text = text.Replace(@"\\", @"\");
Run Code Online (Sandbox Code Playgroud)
...但我的猜测是,原始版本不包含双反斜杠.如果这没有帮助,请提供更多详细信息.
编辑:在回答编辑过的问题时,你stringToBeReplaced只有一个反斜杠.真的.无论你在哪里看到两个反斜杠,那个观众都会逃避它.字符串本身没有两个反斜杠.检查stringToBeReplaced.Length并统计字符.
我尝试了你的帖子的程序,但没有成功.
这是我从调试器得到的:

我保存到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();
}
Run Code Online (Sandbox Code Playgroud)
我在文本框中得到了这个(所以,"b"和"a"之间没有新的行符号:
b\r\na
Length: 6
Run Code Online (Sandbox Code Playgroud)
我怎么能用这个字符串来反转?(我希望"b"和"a"之间有新的一行.)
解:
好吧,这不可能与标准替换,因为\r和\n是一个字符.可以逐字符替换部分字符串,但不能替换一个字符的"半部分".所以,我必须单独替换任何特殊字符,如下所示:
private void Form_Load(object sender, EventArgs e) {
...
string z = x.Replace(@"\r\n", Environment.NewLine);
...
Run Code Online (Sandbox Code Playgroud)
这为我产生了正确的结果:
b
a
Run Code Online (Sandbox Code Playgroud)
小智 5
我遇到了同样的问题,直到我阅读了 Jon Skeet 关于调试器显示单个反斜杠和双反斜杠的答案,即使字符串可能有一个反斜杠。我不知道。所以我改变了我的代码
text2 = text1.Replace(@"\\", @"/");
Run Code Online (Sandbox Code Playgroud)
到
text2 = text1.Replace(@"\", @"/");
Run Code Online (Sandbox Code Playgroud)
这解决了问题。注意:我正在连接和 R.Net,它在路径字符串中使用单个正斜杠。
万一有人卡住了,而上面的答案都没有用,下面是对我有用的。希望能帮助到你。
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"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
124441 次 |
| 最近记录: |