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

时间:2010-02-18 16:29:13

标签: c# xml regex replace

我需要使用正则表达式删除标签“image”。

我正在使用C#.Net

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

<rrr></rrr>

任何???

3 个答案:

答案 0 :(得分:8)

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

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

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

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

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

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

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

答案 1 :(得分:0)

即使XML非常规律并且受到严厉的“验证或死亡”政策的影响,this Stack Overflow question也会非常有启发性。

正则表达式很强大 - 但.NET中的XML工具更适合这项任务,因为它们旨在处理这类事情。您可以根据其结构操作XML ,这是正则表达式无法做到的,因为他们将XML视为文本。

XML是文本,但它是具有特定结构的文本。利用已知的质量。

答案 2 :(得分:-1)

试试这个:

<image[^>]*>