2009-07-09 8 views
0

私はHTMLの部分を解析する必要があります。 それは少しのようになります。REGEX - ネストしたテーブルを含む特定のクラスのtdを見つける

<table> 
    <tr> 
    <td class="blabla"> <table><tr><td><table><tr><td></td></tr></table></td></tr></table> 
    </td> 
    </tr> 
    <tr> 
    <td class="blabla"> <table><tr><td></td></tr></table> 
    </td> 
    </tr> 
</table> 

私はクラスblablaと各tdを抽出する必要がありますが、これらの細胞のそれぞれは、多くのネストされたTDの0以上のネストされたテーブルを持つことができます。私はあなたがCSSセレクタを使用していないのはなぜ

<td class="blabla"> ... many nested stuff ... </td> 

おかげ

+0

あなたはこれから返すことを望んでいるものは明確ではありません – Xetius

答えて

6

正規表現でHTMLを解析しないでください。 HTMLは正規ではないので、あなたが望むものと一致する式を書くことはできません。

言語が提供するライブラリでHTML/XMLパーサを使用します。 System.Xmlには、ファイルを開いてXPathでクエリするための便利なクラスがいくつかあります。

あなたが探しているXPath式が

//td[@class="someClass"] 
+0

.netの実装はわかりませんが、// td [@ class = "someClass"] – Xetius

+0

@Xetius:そうではありません。ごめんなさい。 :) – Welbog

+0

これは私たちが最後にやったことです。 – Gidon

1

を取得したいですか?

+0

これは.NETの勝利アプリであり、テキストを解析します。 – Gidon

+2

@Gidon:HTMLをテキストとして考えないでください。 – Welbog

0

([tTを] [dDの] \ sclass = \ "blabla \")

0

あなたは/<td\sclass=\"(.*?)\">/に似た正規表現を探しているだろうが、私は、.NETでこれを行う方法を知りません。

しかし、あなたがひどくHTMLを形成することができるため、正規表現は構文解析には適していません。それを行うためのより良いツールがあります。

前述したように、XPathを使用すると、// td [@ class = "someClass"]を使用してこれを行うことができます。これはあなたにTDノードを与えるでしょう。その内容を取得して必要に応じて処理することができます

4

であるあなたがextenisve HTMLの構文解析を行う必要がある場合、私はHtml Agility Packの代わりに正規表現を使用することをお勧めします。 HAPはhtmlページからXML文書を作成し、XPathを使用して特定のノードを探すことができます。

0

これは複雑すぎるため、正規表現を使用するだけではできません。先読みマッチングを使用しても、正規表現は、<td>が必要なものの後ろにいくつ見つかったかに基づいて、あなたが探している</td>の数を増やす必要があるため、動的に変更する必要があります。

関連する問題