【问题标题】:C# how to replace Slash Quote \"C#如何替换斜杠引号\"
【发布时间】:2013-04-18 07:10:42
【问题描述】:

我正在尝试创建这样的搜索和替换字符串:

src=\"/path/file.jpg\"

进入

src=\"http://mysite.com/path/file.jpg\"

通过搜索属性 src 和等号斜线引号。问题是创建搜索字符串,每次我这样做时,它都会变成搜索

src=\\"/ 而不是src=\"/

如果此段中的 property = "src",我怎样才能让它工作?

string equalsSlashQuote = "=" + @"\" + "\"";
string search = property + equalsSlashQuote + "/";
string replace = property + equalsSlashQuote + SiteURL + "/";
input = input.Replace(search, replace);

问题是\,我什至尝试将它添加为字符代码值92,它仍然在搜索变量中变为\\。

【问题讨论】:

  • 您如何查看搜索变量?我的猜测是它在调试器中,它向您显示了一个转义版本...
  • 如果要查看未转义的字符串,请按变量旁边的放大镜。
  • Replace ' with \' in C# 的可能重复项 - 看起来很常见“我在调试时将"\" 视为字符串中的"\\"”。
  • 正如@JonSkeet 所说,调试器将向您显示搜索字符串的转义版本。我猜你问这个问题是因为你的搜索字符串不起作用,你正试图通过调试器找出原因。您能否举例说明您获得的输出以及为什么它与预期不同?
  • 你们是对的,我是在通过查看调试器窗口来欺骗自己。

标签: c# string replace quote slash


【解决方案1】:

如果你在字符串前加一个@,字符串就变成“文字”而不使用控制字符或转义符(带有反斜杠)。

所以@"hello\nico" 将生成一个字符串,其中“hello”和“nico”这两个词用斜杠分隔,而不是“hello”和“ico”两个词用换行符分隔。

您还可以定义一个不带@ 的字符串,并使用如下控制字符:"hello\\nico",这将产生相同的结果。第一个反斜杠是控制字符,不是字符串中的实际值。

注意:如果你的 IDE/调试器显示一个字符串的值,at 也会使用第二种格式来显示文本。因此,字符串内的反斜杠将通过在其前面放置另一个反斜杠来进行转义。看起来该字符串包含双斜杠,但事实并非如此。您可以通过以下方式验证这一点:

  • 检查字符串的长度并计算字符数。
  • 将值写入Debug.WriteLineConsole.WriteLine 之类的输出,这将按原样显示该字符串,而没有斜杠作为转义符。

你说:每次我这样做时,都会搜索src=\\"/而不是src=\"/你确定吗?我认为你被 IDE / 调试器愚弄了,它会用第二个反斜杠显示字符串,这只是一个控制字符。

【讨论】:

  • 你们是对的。调试器正在添加转义码,这也让我感到震惊。
  • 感谢您的夸奖。我是否建议您将该答案标记为正确答案,这对于将来遇到相同问题的用户可能会很方便。 :)
猜你喜欢
  • 1970-01-01
  • 2018-02-13
  • 2013-03-02
  • 2023-01-18
  • 2022-01-27
  • 2011-12-25
  • 2014-09-09
  • 2017-09-14
  • 1970-01-01
相关资源
最近更新 更多