2014-02-10 118 views
1

我想使用.NET Regex來匹配一些真正破碎的HTML,我不知道該怎麼做。將內容與嵌套標記匹配

我知道正則表達式對於這項工作來說是一個糟糕的工具,但我只需要從一個巨大的文件中提取一些基本的文本,這些文件裏面有一些非常糟糕的HTML標記,而我的問題似乎對於擅長處理某人的小菜一碟正則表達式。

所以,撇開它的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\>)":但顯然我沒有得到語法,因爲這是行不通的。

任何人都可以幫助我嗎?

[更新]

注意,有可能是這些<span>標籤之間換行。或者,如果你願意,整個字符串可以是一個巨大的線。

+0

如何簡單:(。*)''?這應該做到這一點。 :) – MElliott

回答

0

我想這會得到你想要的東西:

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

Regular expression visualization

Debuggex Demo

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.` 
+0

謝謝,但如果在這些'span'標籤之間有一個換行符,這不起作用。我應該用我的例子更清楚,但是(如果我沒有弄錯),這與我的嘗試1號相同。 – Lou