Entwickler-Ecke

Basistechnologien - Regex Hilfe, bzw. HTML parsen


d4nkuba - So 22.11.15 20:19
Titel: Regex Hilfe, bzw. HTML parsen
Hallo,
ich suche eine komfortable lösung um bestimmte sachen aus dem html text zu filtern.
beispiel:

HTML-Dokument
1:
2:
3:
4:
5:
6:
7:
8:
<tr>
  <td align="left" bgcolor="#FFFFFF"><span class="Stil33"><u>Grundkosten</u></span></td>
  <td align="left" bgcolor="#FFFFFF"> </td>
</tr>
<tr>
  <td width="164" align="left" bgcolor="#CCCCCC"><span class="Stil26">monatl. Paketpreis: </span></td>
  <td width="330" align="left" bgcolor="#CCCCCC"><span class="Stil26">54,99 EUR </span></td>
</tr>

wie kann ich am besten Grundkosten 54,99 EUR rausfiltern?
Über eine Antwort würd ich mich freuen!

Moderiert von user profile iconTh69: HTML-Tags hinzugefügt
Moderiert von user profile iconTh69: Titel-Formatierung geändert.
Moderiert von user profile iconTh69: Topic aus C# - Die Sprache verschoben am Mo 23.11.2015 um 09:20


jaenicke - Di 24.11.15 00:43

Hallo und :welcome:

Wenn die Seite immer genau so aussieht und nur diesen Inhalt hat, kannst du z.B. diesen regulären Ausdruck verwenden:

Quelltext
1:
<span class="Stil26">([0-9,]{1,}) EUR                    


Ausprobieren und debuggen kannst du reguläre Ausdrücke hier:
https://regex101.com/


d4nkuba - Sa 28.11.15 14:53

Das klappt leider nicht laut dem Debugger!
Außer, ich mache etwas bei der Ausgabe falsch.


Palladin007 - Sa 28.11.15 15:11

Ich empfehle, einer Gruppe immer einen Namen zu geben, z.B. so:


Quelltext
1:
<span class="Stil26">(?<value>[0-9,]{1,}) EUR                    


Über die Groups-Property kann dann aus dem Match der Wert der Gruppe abgerufen werden.
Wenn das nicht funktioniert, machst Du wohl irgendetwas falsch ;)
Was, das können wir dir nicht ohne Code sagen.


Allgemein halte ich Regex aber für die denkbar schlechteste Wahl um HTML zu parsen.
Entweder Du verwendest den in .NET vorhandenen WebBrowser (findest Du bei WindowsForms), oder Du nimmst eine externe Library.
Ich hab mir z.B. CsQuery angeschaut, das funktioniert ganz gut und bietet die Möglichkeit, CSS-Selektoren zu verwenden.
Schau dir das und CSS-Selektoren (kenne ich von JQuery) mal an, damit lässt sich der Wert relativ einfach heraus finden, vorausgesetzt der HTML-Code enthält sich nicht ändernde Klassen oder IDs, die Du als Anhaltspunkte nutzen kannst.

Wenn Du den Selektor klug wählst, kann sich der HTML-Code auch stärker verändern und dein Programm arbeitet dennoch korrekt.
Das hängtnatürlich immer von der Website selber ab, ist aber durchaus möglich.