Laden...

Regex oder String Methoden: Was ist besser um bestimmte Teile aus HTML-Code zu extrahieren?

Erstellt von wpb vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.695 Views
W
wpb Themenstarter:in
117 Beiträge seit 2005
vor 13 Jahren
Regex oder String Methoden: Was ist besser um bestimmte Teile aus HTML-Code zu extrahieren?

Hallo!

ich hätte geren einen Tip. Und zwar geht es um folgendes Problem.
Ich muss strings der Form:


<p style="margin:0 0 0.5em 0;"><b>Media from&nbsp;<a href="/title/tt0120737/" onclick="(new Image()).src='/rg/find-media-title/media_strip/images/b.gif?link=/title/tt0120737/';">hier ist ein text</a> (2001)</b></p>
<style type="text/css">


durchsuchen.

Ich brächte zum Schluss die Werte: "/title/tt0120737/" und "hier ist ein text"

Ich frage mich nun wie ich vorgehen soll: String Methoden, oder Regex-
Mit regulären Ausdrücken kenn ich mich nicht so aus, und darum möchte ich gerne wissen ob es für mein Problem sinn machen würde.

Danke schon mal...

6.911 Beiträge seit 2009
vor 13 Jahren

Hallo,

zuerst bieten sich hier Methoden für XML wie Linq to XML an. Danach kannst du aus den gefunden Attributen/Elementen weiterarbeiten.

Wenn die Strings immer gleich aufgebaut sind kommst du mit String-Methoden auch einfach zum Ziel.

Siehe auch [Artikel] Regex-Tutorial

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

49.485 Beiträge seit 2005
vor 13 Jahren

Hallo wpb,

für mich ist das ein klarer Fall für Regex.

Beim Erstellen des Pattern hilft On-the-fly Regex-Tester: Regex-Lab.

herbivore

5.742 Beiträge seit 2007
vor 13 Jahren

String Methoden, oder Regex

Weder noch!

Verwende lieber einen XML bzw. HTML Parser.
Das Html Agility Pack soll einigen Berichten zufolge ganz gut sein.

795 Beiträge seit 2006
vor 13 Jahren

Das
>
soll einigen Berichten zufolge ganz gut sein.

Kann ich nur bestätigen.

Gruß, Christian.

`There are 10 types of people in the world: Those, who think they understand the binary system Those who don't even have heard about it And those who understand "Every base is base 10"`
1.820 Beiträge seit 2005
vor 13 Jahren

Hallo!

Ich würde auch einen HTML-Parser empfehlen. Ich verwende den SgmlReader, damit hat man anschließend alle Funktionalitäten von XML dabei, der Parser kann bei Bedarf auch angepasst werden. Damit kann man flexibler auf mögliche Änderungen im HTML-Code reagieren.

Nobody is perfect. I'm sad, i'm not nobody 🙁

U
208 Beiträge seit 2008
vor 13 Jahren

Das
>>
soll einigen Berichten zufolge ganz gut sein.

Kann ich nur bestätigen. Kann ich ebenfalls bestätigen. Habe es gestern selbst verwendet und es funktioniert einwandfrei. 🙂

49.485 Beiträge seit 2005
vor 13 Jahren

Hallo zusammen,

ein HTML-Parser, der aus dem HTML-Code einen Baum aufbaut, auf den man dann mit den Methoden der Bibliothek komfortabel zugreifen kann, hat in bestimmten Situationen unbestreitbar seine Vorteile, insbesondere wenn man die Struktur des (gesamten) HTML-Codes analysieren will. Wenn man aber nur mal eben bestimmte Attribute und Text-Stellen aus dem HTML-Code benötigt, ist das mit Kanonen auf Spatzen geschossen. Es ist ohne weiteres möglich, die Aufgabe aus dem Eingangspost einfach und zuverlässig mit Regex zu lösen. Also ohne dass man dafür eine externe Bibliothek einbinden muss. Und ohne jeglichen Komfortverlust. Im Gegenteil: Der entstehende Regex-Code ist klar und einfach.

Was den Einarbeitungsaufwand angeht: der ist für eine externe Bibliothek auch gegeben und vielleicht sogar höher als für Regex. Vor allem ist Regex ein Schweizer Messer, das man für die verschiedensten Zwecke immer wieder gebrauchen kann, wogegen ein HTML-Parser nur für die Verarbeitung von HTML taugt. Regex kann man dagegen für beliebige Texte verwenden, egal in welchem Format. Man ist also nicht auf HTML/XML festgelegt. Regex zu lernen zahlt sich während eines Programmierlebens mehr als aus.

herbivore

R
103 Beiträge seit 2009
vor 13 Jahren

@Herbivore

Das mag ja sein, dass Regex Wissen nie weg ist und sich viele Probleme damit lösen lassen. Aber in diesem fall würe ich auch zu dem Agility Html parser raten und mit "Kanonen auf Spatzen schiessen". Html zu parsern ist genau so ein Anwendungsfall wo regex oft versagt.

Selbst diese (einfache) hier gepostete Aufgabenstelleung ist für Regex nicht besonders geeignet. Die Attribute kann man ja wie bei XML z.B. beliebig vertauschen, dann gibts so lustige Sachen wie invalides Html, das trotzdem von allen Browsern gutmütig geparst wird usw...

49.485 Beiträge seit 2005
vor 13 Jahren

Hallo rasepretrep,

Html zu parsern ist genau so ein Anwendungsfall wo regex oft versagt.

das kann ich aus meiner Erfahrung nicht bestätigen. Eher im Gegenteil.

Wie den auch sei. Den konkreten Fall im Ausgangsposts kann man auf jeden Fall problemlos mit Regex lösen. Deshalb bleibe ich dabei, dass es hier mit Kanonen auf Spatzen geschossen wäre, wenn man einen HTML-Parser verwenden würde.

Selbst diese (einfache) hier gepostete Aufgabenstelleung ist für Regex nicht besonders geeignet.

Das sehe ich wie gesagt anders.

Die Attribute kann man ja wie bei XML z.B. beliebig vertauschen,

Es hängt ja von den Eigenschaften der Eingabedaten ab, ob eine Vertauschung von Attributen überhaupt vorkommen kann. Aber selbst wenn, dann ist es kein Problem einen Patern zu schreiben, der das Attribut an beliebiger Stelle im Tag findet.

dann gibts so lustige Sachen wie invalides Html, das trotzdem von allen Browsern gutmütig geparst wird usw...

Erstmal ist auch hier wieder die Frage, ob das bei den realen Eingabedaten überhaupt vorkommen kann. Und selbst wenn, stoßen bei invalidem HTML auch die Parser früher oder später an ihre Grenzen. Andersherum kann man bei Regex durch die Gestaltung des Pattern in gewissen Grenzen auch invalides HTML tolerieren.

Ich kann sogar noch einen Schritt weiter gehen und dieses Argument gegen dich richten, nämlich wenn vor dem gesuchten Text der HTML-Code so invalid ist, dass der Parser so aus dem Tritt kommt, dass er den eigentlich gesuchten Text nicht mehr richtig interpretiert. Regex würde üblicherweise gar nicht erst versucht, den HTML-Code als ganzes zu parsen, sondern sich nur auf den gesuchten Teil konzentriert und dann in diesem Fall seine Vorteile ausspielen.

herbivore

R
103 Beiträge seit 2009
vor 13 Jahren

Naja, dann haben wir ja mal 2 unterschiedliche Ansätze mit entsprechenden Argumenten für den Thread Ersteller, um das Problem zu lösen. =)