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

**ちょうど。 Do not。** [RegExは、XHTML自己完結型のタグを除いて、オープンタグとマッチする可能性があります](http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-タグ) –

+0

正規表現は_ "regular" _ languagesと一致します。 HTMLは規則的ではありません。正規表現を使って解析しないでください。 – Phrogz

答えて

2

答えはHTMLまたはSGMLパーサーを使用することで、.NETのためのいくつかの周りがあります

http://htmlagilitypack.codeplex.com/

SGML parser .NET recommendations

あなたは絶対に正規表現を使用したい場合は、習熟あなた自身がbalancing groupsで、それ以外の場合はネストされたテーブルが壊れます。それは簡単ではないし、通常のSGMLパーサよりもはるかに遅く実行するかもしれない。あなたの表現を見て、私はあなたが正規表現の初心者であることを前提としています(ヒント:欲望を避けるために貪欲な.のマッチを避けてください)。

2

私が知っているあなたは、HTMLパーサを見てするつもりはないので、私はあなたを伝える場合でも、あなたは本当に、私は疑問にお答えします必要があります。

これはテーブルのみに一致します。dotallignoreCase

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

それは2つのオプションが必要です。

あなたはここでそれを試すことができます:http://gskinner.com/RegExr/

                                                           

今すぐOKルセロによって提案されたHTMLの敏捷性パックを使用することを検討していますか?

編集:多分これはあなたが何を意味し、申し訳ありません:

                                                         

+0

サンプルにネストされた 'TABLE'タグを追加すると、ロックが始まります! :-) – Lucero

+0

@Luceroあなたは正しいです、それはネストされたテーブルの最初の視界で壊れます。しかし、やはり正規表現ではないので、マークアップは正規表現では解析できないと思います。右?いずれにしても、あなたのリンクには.NETのための解決策が含まれています(名前!)。 –

+0

@カミロ、名声のおかげで!あなたのサンプルに対して批評家として意図されたものではありませんでした。なぜなら、これは正規表現を使用して解決できるのはなぜかという問題を説明したかっただけです。グループのサポートのバランスを取っていれば(これは一般的な正規表現エンジンの一部ではなく、それをサポートしています)。これらを使用すると、実際にネストされた開始点マッチを実行することができます。 – Lucero

関連する問題