【问题标题】:removing xml tag with regex使用正则表达式删除 xml 标签
【发布时间】:2010-02-18 16:29:12
【问题描述】:

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

我正在使用 C# .Net

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

<rrr></rrr>

有人吗???

【问题讨论】:

  • 为什么需要使用正则表达式?

标签: c# xml regex replace


【解决方案1】:

你不应该在这个任务中使用正则表达式,尤其是当 .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.*?>", "");

虽然第一种方法可以解决您的问题,但这种方法存在一些问题。示例问题:

  • 不区分大小写。
  • &gt; 属性中的字符可能会混淆正则表达式。
  • 换行符无法正确匹配。
  • 不正确地匹配其他以图片开头的标签,例如&lt;image2 /&gt;
  • XML cmets 可能会导致问题。
  • 不能同时处理&lt;image /&gt;&lt;image&gt;&lt;/image&gt;
  • 等等……

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

【讨论】:

    【解决方案2】:

    尽管 XML 非常有规律并且受到严厉的“验证或死亡”政策的影响,this Stack Overflow question 将证明是非常有启发性的。

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

    XML 是文本,但它是具有特定结构的文本。充分利用这种众所周知的品质。

    【讨论】:

      【解决方案3】:

      试试这个:

      &lt;image[^&gt;]*&gt;

      【讨论】:

        猜你喜欢
        • 2019-11-25
        • 2018-09-13
        • 2010-10-21
        • 1970-01-01
        • 1970-01-01
        • 2011-04-16
        • 2013-01-07
        相关资源
        最近更新 更多