Suche Regex Ausdruck für HTML

ronin77

Mitglied
Hallo,

ich möchte aus einer HTML-Datei Werte mittels Regex auslesen. Das Problem sind glaub ich die Zeilenumbrüche und Leerzeichen bei mir. Kann mir da jemand helfen und einen passenden Ausdruck formulieren? Das HTML sieht wie folgt aus:

HTML:
<dt>Name:</dt>
    <dd>
      Testuser
        
        
    </dd>
            
        <dt>Dabei seit:</dt>
    <dd>11.11.2011</dd>

... und so weiter...
Ich möchte mir dynamisch in der Anwendung einen Ausdruck zusammen bauen und mir explizit je nach Bedarf den Namen oder auch das Datum nach "Dabei seit:" auslesen. Wäre echt klasse, wenn mir jemand sagen kann, wie dieser Ausdruck aussehen muss...

Danke,
Ronin
 

faetzminator

Gesperrter Benutzer
Java:
public static String getResult(String input, String key) {
    Matcher m = Pattern.compile("<dt>\\s*" + key + ":\\s*</dt>\\s*<dd>\\s*(.*?)\\s*</dd>").matcher(input);
    if (m.find()) {
        return m.group(1);
    }
    return null;
}
Gibt korrekterweise beim Aufruf von:
Java:
System.out.println(getResult(input, "Name"));
System.out.println(getResult(input, "Dabei seit"));
ein:
Code:
Testuser
11.11.2011
Schlussfolgerung: mit [c]\s*[/c] ist man immer gut bedient :)
 
D

Dow Jones

Gast
Umm, mit RegEx auf anderer Leute HTML loszugehen ist immer etwas heikel, da man sich leider nie sicher sein kann das
a) der HTMLcode auch wohlgeformt ist (bzw. so wie man ihn haben möchte) und
b) das sich der HTMLcode nie ändert (was zur Folge haben kann das der RegEx was falsches matched, wenn überhaupt irgendwas)

Daher würde ich eher dazu raten XPath statt RegEx zu nutzen. Dann muss man sich nicht mehr um Leerzeichen oder Zeilenumbrüche kümmern, und übersichtlicher ist es auch. :)
HtmlCleaner wäre zum Beispiel eine passende Library. Da steckst du ein HTML Dokument rein, lässt einen DOM-Tree generieren, und kannst anschließend mit XPath darin "herumlaufen". In etwa so:
Java:
String name = htmlRootnode.evaluateXPath("//dd[1]").getText();
String datum = htmlRootnode.evaluateXPath("//dd[2]").getText();
 

faetzminator

Gesperrter Benutzer
Und wie geb ich mit XPath das Element aus, welches zu [c]Name:[/c] passt? Natürlich in einer einfacheren, als von mir geposteten Regex-Lösung ;)
 

faetzminator

Gesperrter Benutzer
Genau. Aber da referenzierst du einfach auf [c]//dd[1][/c] und nicht auf [c]"Name:"[/c]. Wie würde bei dir eine Methode [c]getResult(String input, String key)[/c] aussehen?
 
D

Dow Jones

Gast
Keine Ahnung. So gut kenne ich mich damit auch nicht aus. Wenn man ansonsten gar nichts über die Umgebung weiss in welcher der Key auftaucht, dann könnte man halt alle dt-Tags des Dokuments durchlaufen bis man den denjenigen mit dem gewünschten Key findet. Und der gesuchte String befindet sich dann halt in dem darauf folgenden dd-Tag.

In der Praxis findet man in HTMLseiten, die man sich aus dem Netz fischt, aber jede Menge Anhaltspunkte, die einem bei der Suche helfen. So eine Seite in dreckigem Strassen-HTML schaut erfahrungsgemaess eher so aus:
Code:
...
<div class="currentuser">
   username:
   <dt class="username">Name:
      < dd fontsize=5>
         > <img src="mein_avatar.jpg">
      Testuser
        
        
    </dd>
            
        <dt>Dabei seit:</dt>
    <dd><a href="kalender.html">11.11.2011</ a ></dd>
   ...
<div>
...
Da wird es (für XPath) freilich sehr leicht, sich z.B. an den Class-Namen zu orientieren um die gewünschten Informationen zu finden. Soetwas jedoch korrekt mit RegEx behandeln zu wollen wird für mein Empfinden deutlich unübersichtlicher. Und selbst im Fall, das der vom TE gepostete Dokumentenschnipsel tatsächlich das gesamte Dokument darstellt, das er jemals parsen möchte, finde ich XPath noch ästhetischer als RegExp. :)
 

ronin77

Mitglied
... und schon stehe ich vor dem nächsten Problem:

Mein oben genannter Ausschnitt kann inhaltlich leicht variieren. Es kommen folgende Variationsmöglichkeiten hinzu.

HTML:
...   
                <dt>Geburtstag:</dt>
    <dd>
                    07.07.1977                        (34)
                    		<a href="/Events" class="icon icon-cal">Zum Kalender</a>
    </dd>
...

oder auch

HTML:
...
<dt>Heimatland:</dt>
    <dd><a href="/Search/SearchSuper/platform/1/homeCountry/Deutschland/doSearch/1/rmC/1">Deutschland</a></dd>
...

Kann ich das dann alles mit einem einzigen Ausdruck abwickeln? Oder benötige ich seperate reguläre Ausdrücke? Wenn ja, wie würden die anderen beiden Fälle aussehen?

Vielen vielen Dank nochmal!!!
 
D

Dow Jones

Gast
Auch wenn ich mich wiederhole - ich würde mir das mit RegEx nicht antun. Investiere lieber 2 Stunden um dich in XPath einzulesen. Dann kannst du dir leicht alle Dokumentknoten des Typs <dt> herausfischen lassen, überprüfen ob da der richtige Text drinsteht, und dir dann ggf. den folgenden <dd>-Knoten ausgeben lassen. Geht zwar nicht in einer Zeile, ist aber simpel, lesbar und wartbar.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Reflection: Suche Feld + in Unterklassen Java Basics - Anfänger-Themen 7
LimDul Suche Java Stream Tutorial Java Basics - Anfänger-Themen 2
M Suche Resteasy Example Java Basics - Anfänger-Themen 24
B Beliebiger String gegeben Suche Datum in String Java Basics - Anfänger-Themen 6
M binäre Suche im Intervall Java Basics - Anfänger-Themen 6
M binäre Suche Java Basics - Anfänger-Themen 4
H Suche Java3D 32 bit Java Basics - Anfänger-Themen 20
amelie123456 Lineare Suche / Binäre Suche Java Basics - Anfänger-Themen 2
F Suche nach betreuender Person für eine Jahresarbeit der 12. Klasse. Java Basics - Anfänger-Themen 6
K Warum ist die binäre Suche bei der verketteten Liste nicht so effektiv? Java Basics - Anfänger-Themen 3
H Suche jemanden für kleine Uni-Abgabe/ mit Vergütung Java Basics - Anfänger-Themen 1
RudiRüssel Binäre Suche, unsortiert, lokales Maximum Java Basics - Anfänger-Themen 15
Y Suche von Studenten anhand Ihrer Eigenschaften. Java Basics - Anfänger-Themen 1
F Auf der Suche in π Java Basics - Anfänger-Themen 13
C Suche Nachhilfe in Java Java Basics - Anfänger-Themen 5
T Binärbaum-Suche Implementation Java Basics - Anfänger-Themen 6
A suche dringend Hilfe!! Java Basics - Anfänger-Themen 6
N Operatoren Schreibtischtest der Reihen-Suche nach Aufschluss in die Basics Java Basics - Anfänger-Themen 1
B Suche free SVN Hosting Java Basics - Anfänger-Themen 12
S Binäre-Suche Algorithmus Java Basics - Anfänger-Themen 1
S Java Lineare-Suche Zeitmessung Java Basics - Anfänger-Themen 5
S Java Lineare Suche Java Basics - Anfänger-Themen 1
S Binäre-Suche bei unsortierten Daten Java Basics - Anfänger-Themen 7
E Die richtige Suche in der API Java Basics - Anfänger-Themen 1
S suche nach varible POSITION ... fuer das pixel-maennchen Java Basics - Anfänger-Themen 4
E Weg-Suche-Problem rekursiv Java Basics - Anfänger-Themen 12
B Suche Programme mit Fehlern Java Basics - Anfänger-Themen 9
jaleda100 Component für Suche Java Basics - Anfänger-Themen 4
L Suche ein sampel Projekt Java Basics - Anfänger-Themen 2
P Suche Aufwandsgenerator (o-notation) Java Basics - Anfänger-Themen 1
S Suche aktuelles 2D Grafik Tutorial Java Basics - Anfänger-Themen 5
M Suche hilfe bei Array Java Basics - Anfänger-Themen 4
L Binäre Suche mit Comparator Java Basics - Anfänger-Themen 5
J Methoden Suche effiziente Implementierung für eine Methode Java Basics - Anfänger-Themen 3
D Ich suche nach einer Möglickeit den Webseiten Inhalt per Java zu analysieren Automatisch Java Basics - Anfänger-Themen 3
B String: suche nach Wörter und in List<String> speichern Java Basics - Anfänger-Themen 3
D Erste Schritte Suche Quelltext Java Basics - Anfänger-Themen 7
M Rekursion Minimums Suche Java Basics - Anfänger-Themen 12
J Suche Hilfestellung Java Basics - Anfänger-Themen 10
G Erste Schritte Suche Java Programmierer für kleines Projekt Java Basics - Anfänger-Themen 1
J Suche die Emailadresse Java Basics - Anfänger-Themen 6
H Suche in Text und Markierung Java Basics - Anfänger-Themen 14
H Suche in einem Text Java Basics - Anfänger-Themen 17
H Erste Schritte Binäre Suche Java Basics - Anfänger-Themen 37
J Suche simples Beispiel für die EOFException Java Basics - Anfänger-Themen 1
H Rekursion Binäre Suche Java Basics - Anfänger-Themen 2
L Binäre Suche Java Basics - Anfänger-Themen 2
L Linerae Suche in einem sortierten Array Java Basics - Anfänger-Themen 2
N Array, lineare Suche, binäre Suche, Programm bleibt unerwartet stehen... Java Basics - Anfänger-Themen 6
I Innerhalb einer Methode suchen und hinzufügen. Neues Objekt in Suche dann? Java Basics - Anfänger-Themen 8
B Binäre Suche - Junit Test Java Basics - Anfänger-Themen 6
L Einfache Lineare Suche Java Basics - Anfänger-Themen 7
J Binäre Suche eines Array Java Basics - Anfänger-Themen 5
M Methoden Binäre Suche als rekursive Variante Java Basics - Anfänger-Themen 5
D Suche nach der Anzahl von Zonen zwischen zwei Punkten Java Basics - Anfänger-Themen 2
M Benutzerdefinierte Suche in einem String - outofbounds Java Basics - Anfänger-Themen 7
X Best Practice SUCHE ein gutes Javabuch! (kein Anfang von 0) Java Basics - Anfänger-Themen 5
B Binäre Suche in einem String Array Java Basics - Anfänger-Themen 10
A Heap Space Error bei rekursiver Suche in Dateien trotz nur einer Zeile im Speicher Java Basics - Anfänger-Themen 26
M Rekursive Suche in einem Feld Java Basics - Anfänger-Themen 11
S Suche richtigen Typ für Variabel mit den Werten (neu, gebraucht, beschädigt) Java Basics - Anfänger-Themen 7
M Best Practice Programmierstil Graphen-A*-Suche Java Basics - Anfänger-Themen 5
M Suche Hilfe bei sehr kleinen Quelltexten Java Basics - Anfänger-Themen 2
E Suche Klasse die eine Bedinung prüft und einen von zwei Auswahlwerten zurückgibt... Java Basics - Anfänger-Themen 6
D Erste Schritte suche hilfe für db-anbindung Java Basics - Anfänger-Themen 36
S Java Servlet - Suche Java Basics - Anfänger-Themen 1
P Hashing suche Java Basics - Anfänger-Themen 4
K Suche Hilfe bei einfachem Java Code ( Debuggen ) Java Basics - Anfänger-Themen 1
J Variablen Auf der suche nach einem Befehl Java Basics - Anfänger-Themen 2
M Binäre Suche Fehler überall =( Java Basics - Anfänger-Themen 2
Farbenfroh Suche Übungsaufgaben: BinaryTree, Stack Java Basics - Anfänger-Themen 0
D Binärbaum Suche Java Basics - Anfänger-Themen 5
U Vererbung Suche Hilfe anhand eines Bsp. Java Basics - Anfänger-Themen 1
L Suche Programmier-Projekt mit Anleitung Java Basics - Anfänger-Themen 3
A Suche Programmierer für Android App Java Basics - Anfänger-Themen 1
H Suche Vergleichstabelle für die Klassen String und StringBuilder Java Basics - Anfänger-Themen 1
X [SUCHE]Mitentwickler Java Basics - Anfänger-Themen 10
P Methoden suche funktion die char wert ausgibt wenn man numerischen wert und radix angibt Java Basics - Anfänger-Themen 1
D Binare Suche Java Basics - Anfänger-Themen 1
C Erste Schritte Bereich angeben bzw Fehler Suche Java Basics - Anfänger-Themen 6
L Suche in dreidimensionalen Arrays Java Basics - Anfänger-Themen 3
P Lineare Suche im Array Java Basics - Anfänger-Themen 5
X verschachtelte suche Java Basics - Anfänger-Themen 8
T Sortieren/Suche klappt nicht ganz (String Array) Java Basics - Anfänger-Themen 2
S Erste Schritte Suche nach einem guten JAVA-Buch (Definition im Thread) Java Basics - Anfänger-Themen 6
G suche den Begriff & wie programmiere ich sowas (ich ändere den Titel dann) Java Basics - Anfänger-Themen 2
M suche/brauche Links über rein GUI Beispielprogramme Java Basics - Anfänger-Themen 4
I Suche Component welches Map ähnelt Java Basics - Anfänger-Themen 11
D Binäre Suche für Integerarray in rekursiver Funktion Java Basics - Anfänger-Themen 5
G Erste Schritte Suche nach Zeichenkette Java Basics - Anfänger-Themen 26
steffomio Suche brauchbares I18N Lib Java Basics - Anfänger-Themen 4
J Suche Tipps zum erstellen von Algorithmen Java Basics - Anfänger-Themen 5
D Artikel-Suche implementieren Java Basics - Anfänger-Themen 7
S suche nach eclipse plug-in Java Basics - Anfänger-Themen 3
W Compiler-Fehler Binäre Suche Java Basics - Anfänger-Themen 2
K Suche geeignete Code-Beispiele Java Basics - Anfänger-Themen 4
P Suche Java Programme mit gutem/anfängertauglichem Quellcode Java Basics - Anfänger-Themen 8
I Suche Compiler in Java SDK Java Basics - Anfänger-Themen 5
R String in Strig Suche Java Basics - Anfänger-Themen 2
M Suche Beispiel-Spiel Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben