0

给定以下 XML 文档:

<root>
    <myGoodSection 
          some="attr" 
          another="attr" 
      />
    <myBadSection yet="anotherattr" />
</root>

如何/>使用正则表达式返回第一个?到目前为止,我已经能够使用以下表达式非常接近:

(?ims)(?<=<myGoodSection.*?)/>

但是,这将匹配/>第一次出现<myGoodSection. 我还尝试将它与消极的后视相结合,以使表达式不贪婪,但它似乎没有任何效果:

(?ims)(?<=<myGoodSection.*?)(?<!/>)/>

编辑:

我正在使用基于 C# 构建的工具来处理正则表达式替换。如果我直接使用,我无法控制我可以使用或不使用多少匹配System.Text.RegularExpressions项。我在这里引用 C# 来阐明我使用的引擎支持的功能。

是的,我知道作为一般做法,我不应该使用 RegEx 来解析 XML。让我们规定,鉴于我目前的范围、要求和约束,这是一个完全可以接受的解决方案(假设实际上有一种方法可以实现它)。

4

2 回答 2

1

我能够通过替换来完成此操作.\b[^>]以便我的最终表达式变为:

(?ims)(?<=<myGoodSection\b[^>]*?)/>

/>只要前缀不包含任何地方,那只会匹配结束>,然后将排除第一个匹配之后的所有标签。

于 2013-04-22T18:21:34.937 回答
0

首先,您不应该使用 Regex 来解析 XML。

有了那个助手,您可以让它只使用Regex.Match()返回第一个匹配项。

此外,如果您的正则表达式只是返回太多,您可以使用非贪婪选择,如下所示:

(?ims)(?<=<myGoodSection.*?)/>

注意. ?_*

于 2013-04-22T17:02:43.750 回答