2010-12-19 50 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