Entwickler-Ecke
Basistechnologien - Regex HTML Tags
Bordon - Mo 21.03.16 22:03
Titel: Regex HTML Tags
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. - 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()); |
Palladin007 - Di 22.03.16 00:04
Ich würde es eher in diese Richtung machen:
Quelltext
1:
| <td.*?class="wertCaption".*?>(?<value>[^<]*) |
Hier [
https://regex101.com/r/yJ9pQ8/1] 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.
Christian S. - 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! :)
Palladin007 - Di 22.03.16 00:48
Hab's oben editiert :)
Bordon - 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. - 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.
Bordon - 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. - 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).
Ralf Jansen - 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 :suspect:
Bordon - 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
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!