在正则表达式中使用问号

时间:2011-12-27 13:39:50

标签: c# .net regex

我正在尝试解析xml,但在解析它之前,我正在使用.NET的Regex.Replace方法从中清除一些不必要的属性。

这是我的输入

<?xml version="1.0" encoding="UTF-8" ?> 
 <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="urn:Magento" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
 <SOAP-ENV:Body>
 <ns1:loginResponse>
  <loginReturn xsi:type="xsd:string">asdsadsadasdas2321312dasdasdas21asdas</loginReturn> 
  </ns1:loginResponse>
  </SOAP-ENV:Body>
  </SOAP-ENV:Envelope>

这是我为正则表达式编写的

xmlns:[a-zA-Z\d-=":\/\.]+

这是输出

<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
 <SOAP-ENV:Body>
 <ns1:loginResponse>
  <loginReturn xsi:type="xsd:string">asdsadsadasdas2321312dasdasdas21asdas</loginReturn> 
  </ns1:loginResponse>
  </SOAP-ENV:Body>
  </SOAP-ENV:Envelope>

Found 5 matches:
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ns1="urn:Magento"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
String literals for use in programs:
C#
@"xmlns:[a-zA-Z\d-="":\/\.]+"

这是想要的输出

 <SOAP-ENV:Envelope>
 <SOAP-ENV:Body>
 <ns1:loginResponse>
  <loginReturn>asdsadsadasdas2321312dasdasdas21asdas</loginReturn> 
  </ns1:loginResponse>
  </SOAP-ENV:Body>
  </SOAP-ENV:Envelope>

我尝试了类似

的内容
xmlns?xsi?[a-zA-Z\d-=":\/\.]+

但它不起作用。它似乎也无法解决以SOAP-ENV开头的属性。

感谢。

3 个答案:

答案 0 :(得分:1)

尝试将字符串输入转换为XmlElement,然后使用XmlElement.RemoveAttribute方法删除“encodingStyle”属性。

答案 1 :(得分:1)

试试这个正则表达式..这可能会得到你想要的输出。

(xmlns:| SOAP-|xsi:)[\w-=":\/\.]+

问号使前一个语句可选,在你的情况下只使's'和'i'可选

xmln s ?xs ?[a-zA-Z \ d - =“:/。] +

如果您打算让xmlnxsi代码可选,那么您的正则表达式应该如下所示

(xmlns)?(xsi)?[a-zA-Z\d-=":\/\.]+ 

由于正则表达式将捕获[a-zA-Z\d-=":\/\.]+部分中的everthing,因此会抓住很多

答案 2 :(得分:0)

问号在正则表达式中具有特殊含义。如果你想在你的搜索中实际使用它们,请尝试转义问号

 xmlns\?xsi\?[a-zA-Z\d-=":\/\.]+