2009-06-30 6 views
2

Ich versuche, einen regulären Ausdruck zu erstellen, um den Text innerhalb des HTML-Tags wie unten gezeigt zu extrahieren. Allerdings habe ich begrenzte Fähigkeiten in regulären Ausdrücken und ich habe Probleme beim Erstellen der Zeichenfolge.Erstellen von Regular Expression (RegEx) zum Extrahieren von Text des HTML-Tags

Wie kann ich extrahieren den Text aus diesem tag:

<a href="javascript:ProcessQuery('report_drilldown',145817)">text</a>

, dass nur ein Beispiel für den HTML-Quellcode der Seite. Im Grunde brauche ich eine regex Zeichenfolge, um den "Text" innerhalb des <a> Tags zu entsprechen. Kann mir jemand dabei helfen? Vielen Dank. Ich hoffe, meine Frage wurde nicht zu schrecklich formuliert.

UPDATE: Nur zur Klarstellung, report_drilldown ist absolut, aber ich weiß nicht wirklich, wenn es in der regex als absolute oder nicht vorhanden ist.

145817 ist eine zufällige 6-stellige Zahl, die eigentlich eine Datenbank-ID ist. "Text" ist nur einfacher Text, es sollte also kein ungültiger HTML-Code sein. Auch die meisten Leute sagen, dass es am besten ist, Regex in dieser Situation nicht zu verwenden, also was wäre am besten zu verwenden? Vielen Dank!

+11

regex Mit dem Problem des Parsing HTML zu lösen? Jetzt hast du zwei Probleme. –

+0

Wie so? Ich habe Regex zuvor in einem anderen Projekt mit einer ziemlich ähnlichen Aufgabe verwendet. Vielleicht ist es besser, etwas anderes zu verwenden, um den Text des Tags zu extrahieren? –

+3

HTML mit einer Regex zu analysieren ist im Allgemeinen eine schlechte Sache: http://stackoverflow.com/questions/701166/ – Telemachus

Antwort

2
<a href="javascript:ProcessQuery\('report_drilldown',[0-9]+\)">([^<]*)</a> 

Dies wird nicht wirklich das Problem lösen, aber es kann nur kaum kratzen. Insbesondere ist es sehr spröde, die geringste Änderung der Markup und es wird nicht übereinstimmen. Wenn report_drilldown nicht absolut sein soll, ersetzen Sie es durch [^']*, und/oder erfassen Sie es und die Nummer, wenn Sie benötigen.

Wenn Sie etwas brauchen, das HTML analysiert, dann ist es ein Albtraum, wenn Sie sich mit Tag-Suppe befassen müssen. Wenn Sie Python verwenden, würde ich vorschlagen, BeautifulSoup, aber ich weiß nicht, etwas ähnliches für C#. (Wer weiß von einer ähnlichen Tag-Suppe Parsing-Bibliothek für C#?)

+1

Attribute in HTML sollen

+0

Ja, es tut mir leid, dass dumme Konsolen-Fonts mich vermischen - es sollte() sein. Danke für Ihre Hilfe! –

+1

Hah, ich aktualisiere meinen Beitrag, sehe deine Antwort und bringe jetzt das Rollback auf das Original zurück. –

-1

sollten Sie die Eröffnung Tag bekommen.

<\/a> 

gibt Ihnen das schließende Tag. Extrahieren Sie einfach, was dazwischen ist. Noch nicht getestet.

+0

Meinst du \ x intead von/x? Warum ein Zeichen außer null? Warum sind = und "maskiert? Da Sie im sed-Stil keine/delimiter verwenden, ist es auch etwas seltsam, zu entkommen. –

4

Die Antwort ist ... NICHT!

eine Bibliothek verwenden, wie this one

1

Ich stimme regex nicht der beste Weg sein könnte, dies zu analysieren, aber es ist mit Rückreferenzierung leicht gemacht:

<(?<tag>\w*)(?:.*)>(?<text>.*)</\k<tag>> 

Wo Tag und Text sind Capture-Gruppen genannt.

Hut-Tipp: Expresso Bibliothek

+0

Selbst wenn man wohlgeformte Eingaben annimmt (wenn dies nicht der Fall ist, kann dieser Syntaxfehler fehlschlagen oder, schlimmer noch, falsch Erfolg) Sie haben zwei Probleme, die durch diesen Abtastwerteingang gezeigt:.. 1) Text mehr Text 2) einb natürlich Ihre Antwort ist wirklich nicht besser als meine, aber ich wäre zögerlich Englisch: www.mjfriendship.de/en/index.php?op...=view&id=167 Regex ist einfach das falsche Werkzeug für diesen Job, auch wenn es gelegentlich funktioniert –

+0

Ok, ich werde weiterhin nach einer sehr "sicheren" und "guten" Methode zur Verarbeitung solcher "Tag - Suppe" suchen, aber Jetzt, da R. Pates Regex funktioniert, werde ich es weiter verwenden, bis ich eine bessere Lösung gefunden habe. Vielen Dank an alle !!! –