使用正则表达式删除xml标记

Lai*_*Lai 0 c# regex xml replace

我需要用正则表达式删除标签"image".

我正在使用C#.Net

例子<rrr><image from="91524" to="92505" /></rrr>应该成为:

<rrr></rrr>
Run Code Online (Sandbox Code Playgroud)

任何人???

Mar*_*ers 8

你不应该真正使用正则表达式来完成这项任务,特别是当.NET提供如此强大的工具来处理XML时:

XElement xml = XElement.Parse("<rrr><image from=\"91524\" to=\"92505\" /></rrr>");
xml.Descendants("image").Remove();
Run Code Online (Sandbox Code Playgroud)

但是如果你坚持用正则表达式做这个,那么让我们看看会发生什么:

string xml = "<rrr><image from=\"91524\" to=\"92505\" /></rrr>";
string output = Regex.Replace(xml, "<image.*?>", "");
Run Code Online (Sandbox Code Playgroud)

虽然第一种方法适合您,但这种方法存在一些问题.示例问题:

  • 不处理区分大小写.
  • > 属性中的字符可能会混淆正则表达式.
  • 换行符将无法正确匹配.
  • 错误地匹配以图像开头的其他标记<image2 />.
  • XML注释可能会导致问题.
  • 不处理<image /><image></image>.
  • 等等...

其中一些很容易修复,有些更棘手.但最终,当LINQ to XML解决方案如此简单并为您完成所有这些时,不值得花时间改进正则表达式解决方案来处理所有特殊情况.