C#String.Replace双引号和文字

我对c#很新,所以这就是我在这里问的原因。

我正在使用一个返回长字符串XML值的Web服务。 因为这是一个字符串,所有属性都转义了双引号

string xmlSample = "" 

这是我的问题。 我想做一个简单的string.replace。 如果我在PHP中工作,我只需要运行strip_slashes()。

但是,我在C#,我不能为我的生活弄清楚。 我不能写出我的表达式来替换双引号(“),因为它终止了字符串。如果我逃避它,那么它的结果不正确。我做错了什么?

  string search = "\\\""; string replace = "\""; Regex rgx = new Regex(search); string strip = rgx.Replace(xmlSample, replace); //Actual Result  //Desired Result  

MizardX:要在原始字符串中包含引号,您需要将其加倍。

这是重要的信息,现在尝试这种方法……没有运气。这里有双引号发生的事情。 你们所建议的概念都是可靠的,但这里的问题是处理双引号,看起来我需要做一些额外的研究来解决这个问题。 如果有人想出一些东西,请发一个答案。

 string newC = xmlSample.Replace("\\\"", "\""); //Result  string newC = xmlSample.Replace("\"", "'"); //Result newC "" 

C#中的以下语句

 string xmlSample = "" 

实际上会存储该值

  

 string xmlSample = @""; 

有价值的

  

对于第二种情况,您需要用空字符串替换斜杠(),如下所示

 string test = xmlSample.Replace(@"\", string.Empty); 

结果将是

  

PS

  1. 斜杠( \ )是C#中的默认转义字符
  2. 要忽略斜杠,请在字符串的开头使用@
  3. 如果使用@,转义字符是双引号(“)

根本没有理由使用正则表达式……这比你需要的要重得多。

 string xmlSample = "blah blah blah"; xmlSample = xmlSample.Replace("\\\", "\""); 

字符串和正则表达式都使用\来进行转义。 正则表达式将看到字符\后跟" ,并认为它是一个字面上的逃脱。试试这个:

 Regex rgx = new Regex("\\\\\""); string strip = rgx.Replace(xmlSample, "\""); 

您还可以在C#中使用原始字符串(也称为veratim字符串)。 它们以@为前缀,所有反斜杠都被视为普通字符。 要在原始字符串中包含引号,您需要将其加倍。

Regex rgx = new Regex(@"\""")
string strip = rgx.Replace(xmlSample, @"""");

如果要获取XML字符串,为什么不使用XML而不是字符串?

您将可以访问所有元素和属性,如果使用System.Xml命名空间,它将更加容易和极快

在您的示例中,您将获得此字符串:

 string xmlSample = ""; 

您需要做的就是将该字符串转换为XML文档并使用它,如:

 System.Xml.XmlDocument xml = new System.Xml.XmlDocument(); xml.LoadXml(xmlSample); System.Xml.XmlElement _root = xml.DocumentElement; foreach (System.Xml.XmlNode _node in _root) { Literal1.Text = "
" + _node.Name + "
"; for (int iAtt = 0; iAtt < _node.Attributes.Count; iAtt++) Literal1.Text += _node.Attributes[iAtt].Name + " = " + _node.Attributes[iAtt].Value + "
"; }

在ASP.NET中,这将输出到Literal1,如:

 item att1 = value att2 = value2 

一旦你在XmlElement中拥有了该元素,就很容易搜索并获取该元素中的元素的值和名称。

试一试,我在检索WebServices响应时使用它很多,并且当我将某些东西存储在XML文件中作为小应用程序的设置时。