使用嵌套标记匹配内容

时间:2014-02-10 18:57:39

标签: .net regex

我想使用.NET Regex来匹配一些真正破碎的HTML,我不知道该怎么做。

我知道正则表达式对于这项工作来说是一个糟糕的工具,但我只需要从一个巨大的文件中提取一些基本文本,其中包含一些非常糟糕的HTML标记,我的问题对于擅长Regex的人来说似乎是小菜一碟

所以,暂时放下它的HTML,让我说我有这个:

<span class=comment>First block with <span class=nest>nested</span> text.</span>
<stuff>
<more-badly-formatted-tags>
<td - out of nowhere>
<span class=comment>Other block with <span class=nest>nested</span> text.</span>

我只想获取span个标记的所有内容以及任何嵌套的span标记。对于上面的例子,那只是:

First block with <span class=nest>nested</span> text.
Other block with <span class=nest>nested</span> text.

这就是我需要的一切,这就是为什么我根本不想进入HtmlAgilityPack。

到目前为止我尝试了什么

  1. 天真的正则表达式:@"<span class=comment>(<?comment>.*)</span>":这将贪婪地匹配第一个和最后一个span之间的所有内容。

  2. 懒惰的正则表达式:@"<span class=comment>(<?comment>.*?)</span>":这将与第一个结束span匹配,并且不适用于嵌套标记。

  3. 平衡:@(?<tag>\<span\b[^\>]*\>)(?<comment>.*)(?<-tag>\</span\>)":但显然我没有得到语法,因为这不起作用。

  4. 任何人都可以帮我吗?

    [更新]

    请注意,这些<span>代码之间可能存在换行符。或者,如果你愿意,整个字符串可以是一个巨大的行。

2 个答案:

答案 0 :(得分:1)

简单地说:

<span.*?>(.*)</span>

工作正则表达式示例:

http://regex101.com/r/bX3gU2

匹配

1.  `First block with <span class=nest>nested</span> text.`

2.  `Other block with <span class=nest>nested</span> text.`

答案 1 :(得分:0)

我认为这会让你得到你想要的东西:

<span.*?>(.*)</span>

Regular expression visualization

Debuggex Demo