删除正则表达式模式在字符串末尾有反斜杠双引号的文本

时间:2015-09-17 22:19:01

标签: c# regex string

我有一个字符串,我需要删除一些以反斜杠双引号结尾的字符。有多个比赛。我把它放在ALMOST工作的地方,除了我无法摆脱命名空间出现的每个地方的最后一个反斜杠双引号(\“)。

我去了regexpal.com并提出了这个正则表达式字符串,它可以满足我的需求。

xmlns=*.+be/\\"

但是当我把它放在C#中时,两个反斜杠让它抓得太多了。此代码重复我的问题并显示我的进度:

var str = "<Request>  <sender xmlns=\"http://stuff.otherstuff.be/\">    <name>Sender name</name>    </sender>  <addressee xmlns=\"http://some.stuff.be/\"> </addressee>  <networkType xmlns=\"http://yet.more.stuff.be/\">11</networkType></Request>";

str = Regex.Replace(str, @"xmlns=.*?\.be/", "", RegexOptions.IgnoreCase);

我看起来像这样的字符串。我需要修改正则表达式以捕获反斜杠和双引号

<Request>  
    <sender \">    
         <name>Sender name</name>    
    </sender>  
    <addressee \"> 
    </addressee>  
    <networkType \">11</networkType>
</Request>

我尝试了多个反斜杠和多个双引号的各种组合,但我没有得到它。

我在这里和其他地方看了很多答案,并没有想出来,所以“有重复”并没有真正帮助我。

编辑:在代码的这一点,我所拥有的是一个来自序列化类的字符串。我真的不想将字符串加载到XMLDocument中并执行递归调用,如显示的可能答案。一个快速的正则表达式替换应该在1个语句中得到我需要的东西。

编辑:添加两个双引号的答案对我没有帮助,因为它忽略了我试图摆脱的最后反斜杠。

2 个答案:

答案 0 :(得分:2)

您需要添加这样的尾随引用(如果使用@语法,则必须使用""来匹配一个引号):

str = Regex.Replace(str, @"xmlns=.*?\.be/""", "", RegexOptions.IgnoreCase);

如果您想要<sender>而不是<sender >,请在开头添加空格:

str = Regex.Replace(str, @" xmlns=.*?\.be/""", "", RegexOptions.IgnoreCase);

答案 1 :(得分:0)

请注意,要删除XML命名空间,您可以使用How to remove all namespaces from XML with C#?中描述的常规C#代码,但由于您说这没有帮助,因此这是针对您的特殊情况的解决方案。

为了删除任何斜杠,您可以使用字符类[/\\] - 以防您同时拥有\/。请注意,字面反斜杠必须在逐字字符串文字中加倍。

正则表达式看起来像

\s*xmlns=[^<]*?\.be[/\\]"

这是regex demo

在C#中:

var rx = new Regex(@"\s*xmlns=[^<]*?\.be[/\\]""");

\s*将“修剪”结果替换中的空格。

Results after replacing with string.Empty

enter image description here