Autor Beitrag
Bordon
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Mo 21.03.16 22:03 
Hallo zusammen,
ich bin am verzweifeln. Ich möchte folgenden HTML-Code:

ausblenden 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 user profile iconChristian S.: HTML-Tags hinzugefügt
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mo 21.03.16 22:44 
Wenn der Tag, der da drum herum ist, eindeutig ist, sollte es so gehen:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
BeitragVerfasst: Di 22.03.16 00:04 
Ich würde es eher in diese Richtung machen:

ausblenden 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
BeitragVerfasst: Di 22.03.16 00:48 
Hab's oben editiert :)

Für diesen Beitrag haben gedankt: Christian S.
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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 user profile iconPalladin007 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 Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: 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?





ausblenden 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 user profile iconChristian S.: C#-Tags hinzugefügt
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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 WertCaption braucht :suspect:
Bordon Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: 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.


ausblenden 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 user profile iconChristian S.: C#-Tags hinzugefügt
Einloggen, um Attachments anzusehen!
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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".