2010-12-19 105 views
0

我想刪除HTML文件中的表格,具體來說,下面的文檔,我想刪除標籤<TABLE....> and </TABLE>內的任何東西。該文檔包含多個表格,其中包含文本。正則表達式來解析HTML表格

然而,我提出的表達式<TABLE.*>\s*[\s|\S]*</TABLE>\s*會刪除表格之間的文本。實際上,它會移除第一個<TABLE>和最後一個</TABLE>標記之間的所有內容。我想保留文字,只刪除表格。任何建議,非常感謝。謝謝。

==================== 

<TABLE STYLE=xxx, Font=yyy, etc> 

table texts that should be DELETED... 

</TABLE> 


other texts that should be KEPT... 


<TABLE STYLE=xxx, Font=yyy, etc> 

table texts that should be DELETED... 

</TABLE> 

========================================== 
+3

**只是。不要。**可能的重複[RegEx匹配開放標籤,除了XHTML獨立標籤](http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-標籤) – 2010-12-19 15:19:26

+0

正則表達式匹配_「常規」_語言。 HTML不規則。不要試圖用正則表達式解析它。 – Phrogz 2010-12-19 16:22:47

回答

2

答案是使用HTML或SGML解析器,也有一些周圍.NET:

http://htmlagilitypack.codeplex.com/

SGML parser .NET recommendations

如果你絕對要使用正則表達式,熟悉你自己與balancing groups,否則嵌套表將打破。這並不容易,而且可能比常規的SGML解析器慢得多。但要注意:看到你的表情我假設你是一個正則表達式新手(提示:避免貪婪.火柴不惜任何代價),所以這可能還不是你的一杯茶。

2

因爲我知道你不會看一個HTML解析器,即使我告訴你你真的應該,我就回答這個問題。

這僅匹配表:

<table.*?>.*?</table> 

它需要兩個選項:dotallignoreCase

你可以在這裏嘗試一下:http://gskinner.com/RegExr/

                                                           

現在請考慮使用由Lucero建議的HTML Agility Pack好嗎?

編輯:也許這是你的意思,不好意思:

                                                         

+0

爲您的示例添加一個嵌套的'TABLE'標籤,它將開始搖滾! :-) – Lucero 2010-12-19 16:07:03

+0

@Lucero你是對的,它會在嵌套表的第一眼看到它。但是,再次,我猜標記不能被正則表達式解析,因爲它不是「常規」的。對?無論如何,你的鏈接確實包含了.NET的解決方案(讚美!)。 – 2010-12-19 16:25:58

+0

@Camilo,感謝您的榮譽!它不是對你的示例的批評,我只想說明爲什麼只有使用正則表達式才能解決問題,如果你有平衡組支持(這不是最常見的正則表達式引擎的一部分,而是.NET引擎確實支持它)。有了這些,你實際上可以嵌套開始結束匹配,這樣就可以完成。 – Lucero 2010-12-19 16:30:18