【问题标题】:remove nested element using regular expression使用正则表达式删除嵌套元素
【发布时间】:2013-08-14 05:37:28
【问题描述】:

我是正则表达式的新手。我只想从<firstpar> 中捕获文本部分,或者删除所有<asmbly> 及其所有子节点和值。谁能告诉我如何做到这一点。以下是 xml 字段的快照。谢谢。

<?xml version="1.0" encoding="UTF-8"?>
<firstpar>
    <thumbcred>Sample 1 thumbcred</thumbcred>
    <asmbly>
       <caption>
           <p><work ty="drawing">Two Fabulous Animals</work>Sample 1 <e> sample 1caption </e></p>
        </caption>
        <credit>Paul Miller/AP</credit>
        <asset id="126099" hgt="450" wdth="289" tmstp="24-OCT-08"
            bintype="2" filename="images/sample126099.jpg" source="eb" bighgt="1600"
            bigwdth="1029" bigfilename="botany003.jpg"
            bigdeployfullfilename="/eb-media/99/126099-050-CAD1EF0A.jpg"
        />

        <copyright>Copyright © 1994-2013 Encyclopædia Britannica,  Inc.</copyright>
    </asmbly>

Sample firstpar text <e>Sample e</e> just some
text <sub>sample sub </sub><e>sample e text again</e> more text with sup sub e. 

    </firstpar>

【问题讨论】:

  • 我不是这方面的专家,但我认为您可能需要一个 xml 解析器,而不是正则表达式
  • 使用 XML 解析库,NOT 正则表达式。 XML 是一种上下文无关语言,而不是常规语言。
  • 有很多好的(免费的)XML 解析器可用。您使用什么语言,以便我们为您指明正确的工具以及如何使用它?
  • 我正在尝试在 c# 中获取 的文本部分。您可以推荐一个好的 xml 解析器吗?谢谢。
  • 为什么不能使用 LINQ to XML?

标签: c# .net xml regex


【解决方案1】:

不幸的是,正则表达式的已知限制之一是它处理嵌套

您可以并且应该使用您所使用的任何语言的任何 XML 解析器。


如果您有一个非常具体的 XML 片段和一个非常具体的目标,则可以使用正则表达式对其执行一些操作,但是一旦您尝试将正则表达式应用于非特定的 xml 片段,它将无法处理。

【讨论】:

  • 第一个陈述有点笼统。 PCRE 和 .NET 的正则表达式风格都可以很好地处理嵌套(并且 OP 恰好使用 C#),并且对于一些简单的情况非常优雅。更重要的是,XML 非常复杂,因为属性值、XML cmets、CDATA 和诸如此类的东西使得几乎不可能在 XML 上编写一个健壮的正则表达式。
猜你喜欢
  • 2014-10-09
  • 2013-02-08
  • 1970-01-01
  • 2020-02-14
  • 1970-01-01
  • 2012-07-05
  • 2019-08-31
  • 2019-02-16
  • 1970-01-01
相关资源
最近更新 更多