Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

20.09.2014, 10:45

C# Regex HTML Pattern

Hey,

ich hätte eine Frage bezüglich eines ausgeklügeltes HTML Regexpattern.

ich habe eine Htmldatei lokal auf dem Rechner habe sie ein gelesen und möchte den Inhalt zwischen:

<div class="Was geht ab"> und <tr class="Irgendwas"> und <img src="...png">

Da ich mich mit Regex leider iwie sehr schwer tue :( ,
dachte ich jemand von euch hätte eine Idee :)

Ganz generell, ist es machbar einen Regex für ein generelles Vorkommen von: <Htmltag bezeichner="Inhalt der ausgelesen werden soll" bezeichner2="Nächster auszulesender Inhalt"> etc..., zu definieren?

Beispiel: <tr class="Irgendwas">

Wäre über Hilfen sehr dankbar :)

Mfg

JungleProgger

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »JungleProgger« (20.09.2014, 10:56)


Tobiking

1x Rätselkönig

  • Private Nachricht senden

2

20.09.2014, 11:30

HTML ist keine reguläre Sprache und lässt sich daher nicht korrekt mit regulären Ausdrücken parsen. Die Arbeit wäre aber so oder so überflüssig, da es fertige HTML Parser (z.B. http://htmlagilitypack.codeplex.com/) gibt, die man direkt einsetzen kann.

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

3

20.09.2014, 14:50

Ich möchte Tobiking kurz ergänzen bzw erläutern was seine Aussage bedeutet. Mit regulären Sprachen und somit auch mit deinen regulären Ausdrücken kannst du parsen ohne Gedächtnis. Es gibt ein ähnliches Problem welches aber etwas einfacher ist als deines. Stell dir mal vor du möchtest einen String bzw eine Datei parsen. Der Inhalt besteht nur aus "(" und ")". Du möchtest am Ende der Datei feststellen ob die Klammerung korrekt ist, das bedeutet auf jede öffnende Klammer kommt eine schließende Klammer und umgekehrt. Halt das Verhalten welches man bei Klammern erwartet:
"( () ) () ()" wäre korrekt,
"() () () )" wäre nicht korret.
Wenn du jetzt einen regulären ausdruck schreiben möchte der eben genau das überprüft, dann wird das nicht geben. Eben weil du dir ein paar Dinge merken können musst. Dein Fall ist nun eine Erweiterung dazu. Tags kann man betrachten wie Klammern. Sie folgen den selben regeln wie unsere Klammern. Nur in diesem Fall gibt es verschiedene Arten von Klammern. Und in unserem Fall ist eine Klammer eben keine Klammer sondern ein Tag. Das Verhalten ist das selbe. Wie gesagt gibt es schon fertige HTML Parser. Wenn du aber mal ein wenig selber experimentieren möchtest. Kellerautomaten wären das Stichwort um so einen Parser zu entwickeln. Je nachdem wie aufwendig du es dir machen willst könntest du zuerst einen Lexer schreiben der deinen Eingabestring in Tokens unterteilt und diesen Tokenstream dann parsen. Damit haben wir noch ein paar Stichwörter wie, "Lexer", "Parser", "Token", "Kellerautomat". Kellerautomaten bezeichnet man auch als "Stackmachine" oder als "Push Down Automaton" bzw "PDA".
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

4

20.09.2014, 22:51

Ok wie immer vielen Dank für die aufschlussreiche Erklärung :)

Werbeanzeige