2009-07-09 15 views
0

Ich muss über ein Stück HTML analysieren. Es sieht ein bisschen wie:REGEX - Finden Sie TD mit bestimmten Klasse, einschließlich geschachtelter Tabellen

<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> 

Ich brauche jede td mit Klasse konnte blabla, aber jede dieser Zellen zu extrahieren haben 0 oder mehr verschachtelte Tabellen mit vielen verschachtelten TDs. Ich möchte

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

Dank

+0

Sie sind nicht genau klar, was Sie von diesem – Xetius

Antwort

6

Versuchen Sie nicht, HTML mit regulären Ausdrücken zu analysieren. Sie können keinen Ausdruck schreiben, der Ihren Vorstellungen entspricht, da HTML nicht regulär ist.

Verwenden Sie einen HTML/XML-Parser in einer Bibliothek, die Ihre Sprache bereitstellt. System.Xml verfügt über eine Reihe nützlicher Klassen, mit denen Sie Ihre Datei öffnen und mit XPath abfragen können.

Der XPath-Ausdruck Sie suchen ist

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

Nicht sicher von der .net-Implementierung, aber das wäre nicht // td [@ class = "someClass"] – Xetius

+0

@Xetius: Richtig. Es tut uns leid. :) – Welbog

+0

Das haben wir am Ende gemacht. – Gidon

1

Warum Sie keine CSS-Selektoren bekommen?

+0

zurückgeben möchten Es ist auf einer .NET-Win-App, die Text analysiert. – Gidon

+2

@Gidon: Denken Sie nicht über HTML als Text nach. – Welbog

0

([tT] [dD] \ S-Klasse = \ "blabla \")

0

Sie würden für einen regulären Ausdruck suchen ähnlich wie /<td\sclass=\"(.*?)\">/, aber ich weiß nicht, wie dies in .net zu tun.

Aufgrund der Art, wie Sie HTML schlecht formatieren können, ist Regex jedoch kein guter Kandidat für das Parsing. Dafür gibt es viel bessere Werkzeuge.

Wie bereits erwähnt, wäre die Verwendung von XPath ein guter Weg, dies mit // td [@ class = "someClass"] zu tun. Dies würde Ihnen den td-Knoten geben. Sie können dann den Inhalt davon abrufen und wie erforderlich verarbeiten

4

Wenn Sie extenisve HTML Parsing tun müssen, würde ich mit dem Html Agility Pack anstelle von regulären Ausdrücken empfehlen. HAP erstellt ein XML-Dokument von einer HTML-Seite, sodass Sie mithilfe von XPath nach bestimmten Knoten suchen können.

0

Sie können dies nicht nur mit regulären Ausdrücken tun, weil es zu kompliziert ist. Selbst wenn Sie den Lookahead-Abgleich verwenden, müsste sich der Regex dynamisch ändern, da Sie die Anzahl der gesuchten </td> basierend darauf, wie viele <td> nach dem gewünschten gefunden werden, erhöhen müssen.

Verwandte Themen