Autor |
Beitrag |
Bordon
Hält's aus hier
Beiträge: 5
|
Verfasst: Mo 21.03.16 22:03
Hallo zusammen,
ich bin am verzweifeln. Ich möchte folgenden HTML-Code:
HTML-Dokument 1: 2: 3: 4: 5:
| <td class="balkenL"><div style="width:16px;background-color:#D30029;"> </div></td> <td class="wertL"><span>107,35</span></td> <td class="wertCaption">Fehlpässe</td> <td class="wertR">104,82</td> <td class="balkenR"><div style="width:16px;background-color:#C2BFBF;"> </div></td> |
mit regex so entfernen, dass nur das Wort "Fehlpässe" herausgefiltert wird.
Kann mir hierzu bitte jemand helfen?
Danke vorab.
Grüße
Moderiert von Christian S.: HTML-Tags hinzugefügt
|
|
Christian S.
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Mo 21.03.16 22:44
Wenn der Tag, der da drum herum ist, eindeutig ist, sollte es so gehen:
C#-Quelltext 1: 2: 3: 4:
| var rx = new Regex(@"<td class=""wertCaption"">(.*?)</td>"); var m = rx.Match(textBox1.Text); if (m.Success) MessageBox.Show(m.Groups[1].ToString()); |
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Palladin007
Beiträge: 1282
Erhaltene Danke: 182
Windows 11 x64 Pro
C# (Visual Studio Preview)
|
Verfasst: Di 22.03.16 00:04
Ich würde es eher in diese Richtung machen:
Quelltext 1:
| <td.*?class="wertCaption".*?>(?<value>[^<]*) |
Hier das ganze nochmal schön formatiert.
So kann der HTML-Code variieren, solange es ein td-Tag mit der Klasse "wertCaption" ist und im Wert selber kleine öffnende spitze Klammer steht.
Lässt sich sicher noch verfeinern, besonders im Hinblick auf das Parsen vom HTML-Code selber, aber ich denke, dass das ausreicht.
Zuletzt bearbeitet von Palladin007 am Di 22.03.16 00:48, insgesamt 1-mal bearbeitet
|
|
Christian S.
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Di 22.03.16 00:41
Könntest Du den regulären Ausdruck bitte (zusätzlich) hier ins Forum schreiben, damit wir alles hier beisammen haben und nicht drauf angewiesen sind, dass der Link auch in Zukunft noch geht? Danke!
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Palladin007
Beiträge: 1282
Erhaltene Danke: 182
Windows 11 x64 Pro
C# (Visual Studio Preview)
|
Verfasst: Di 22.03.16 00:48
Hab's oben editiert
Für diesen Beitrag haben gedankt: Christian S.
|
|
Ralf Jansen
Beiträge: 4703
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: Di 22.03.16 14:28
Sollte man nicht eher wen es um html geht ein echtes DOM aufbauen um irgendwas gezielt auszulesen?
Z.b via Html Agility Pack
|
|
Bordon
Hält's aus hier
Beiträge: 5
|
Verfasst: Di 22.03.16 18:25
Hallo zusammen,
zuerst mal danke für die schnellen Antworten. Der Beitrag von Christian S. hat zunächst funktioniert.
Jedoch möchte ich nun alle Werte (sind ca. 12 Stück) aus dem HTML-Code filtern. Bisher bekomme ich nur ein Ergebnis.
Ich denke mal dass ich das mit einer Foreach-Schleife lösen kann, oder?
Grüße
|
|
Christian S.
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Di 22.03.16 18:48
Du wirst dann statt der Match die Matches-Methode anwenden müssen, ansonsten sollte das das gleiche sein. Ich würde Dir aber wirklich den Regex empfehlen, den Palladin007 vorgeschlagen hat.
//edit: @Ralf: Ich glaube, manchmal ist es einfacher einen Regex zu nehmen, aber generell ist Dein Ansatz der sauberere.
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Bordon
Hält's aus hier
Beiträge: 5
|
Verfasst: Di 22.03.16 19:28
Hab das Pattern von Palladin007 genommen und es funktioniert genauso - danke schonmal.
Allerdings gibt es bei Matches die Success-Methode nicht. Gibt es da was vergleichbares?
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| WebClient web = new WebClient(); string htmlCode = web.DownloadString(url);
string pattern = @"<td.*?class=""wertCaption"".*?>(?<value>[^<]*)"; Regex rx1 = new Regex(pattern); var m = rx1.Matches(htmlCode);
if (m.Success) { Console.WriteLine(m.Groups[1].ToString()); } Console.ReadLine(); |
Moderiert von Christian S.: C#-Tags hinzugefügt
|
|
Christian S.
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Di 22.03.16 19:38
Matches gibt eine MatchCollection zurück, also eine Liste von Einzel-Matches. Über diese Einträge iterierst Du. Wenn nichts gefunden wurde, ist die Collection leer (aber nicht null).
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Ralf Jansen
Beiträge: 4703
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: Di 22.03.16 20:14
Zitat: | @Ralf: Ich glaube, manchmal ist es einfacher einen Regex zu nehmen, aber generell ist Dein Ansatz der sauberere. |
Korrekt. Hier? ... hmh. Für wie wahrscheinlich halten wir es das er aus dem Html tatsächlich nur den Inhalt von Wert Caption braucht
|
|
Bordon
Hält's aus hier
Beiträge: 5
|
Verfasst: Di 22.03.16 23:32
Naja, bin in der Hinsicht nicht der crack, möchte mich aber damit beschäftigen damit ich dazulernen kann.
Habe es nun mal versucht, bekomme mit folgendem coding auch die Ergebnisse, allerdings werden bei der Ausgabe (siehe Anhang) die html-Tags
<td class="wertCaption">
ebenfalls mit ausgegeben. Möchte eigentlich nur die Werte.
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| WebClient web = new WebClient(); string htmlCode = web.DownloadString(url); string pattern = @"<td.*?class=""wertCaption"".*?>(?<value>[^<]*)";
Regex rx1 = new Regex(pattern); MatchCollection matches = rx1.Matches(htmlCode); foreach (Match match in matches) { foreach (Capture capture in match.Captures) { Console.WriteLine(capture.Value); } } Console.ReadLine(); |
So wie es aussieht muss ich mich doch mit HtmlAgilityPack befassen. Außer ihr habt noch eine Idee dazu!?
Moderiert von Christian S.: C#-Tags hinzugefügt
Einloggen, um Attachments anzusehen!
|
|
Christian S.
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Di 22.03.16 23:43
Wieso benutzt Du Captures? Und hast Du Dir in der Doku mal angeguckt, wie man es benutzt?
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|