我有一个字符串,我需要删除一些以反斜杠双引号结尾的字符。有多个比赛。我把它放在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个语句中得到我需要的东西。
编辑:添加两个双引号的答案对我没有帮助,因为它忽略了我试图摆脱的最后反斜杠。答案 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[/\\]"
在C#中:
var rx = new Regex(@"\s*xmlns=[^<]*?\.be[/\\]""");
\s*
将“修剪”结果替换中的空格。