Laden...

Parsen des Inhalts des Quelltext einer Seite

Erstellt von Nyrk vor 16 Jahren Letzter Beitrag vor 16 Jahren 3.637 Views
N
Nyrk Themenstarter:in
11 Beiträge seit 2008
vor 16 Jahren
Parsen des Inhalts des Quelltext einer Seite

Hallo,

ich habe folgendes Problem.

Ich hole mir den Quelltext einer Seite und möchte daraus bestimmte Inhalte parsen.

Den Quelltext zu bekommen ist kein großes Ding, leider weiß ich nicht genau wie man mit c# parsen kann.

Kann mir da jemand mal nen Tipp geben?

Nyrk

O
778 Beiträge seit 2007
vor 16 Jahren

Das Stichwort, wonach du suchen musst, lautet Regex (regulaere Ausdruecke)

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo Nyrk,

bisschen sehr allgemein deine Beschreibung. Die Wahrscheinlichkeit, dass Regex passt ist groß, aber mit Sicherheit lässt sich das auf eine so allgemeine Frage nicht sagen.

herbivore

998 Beiträge seit 2007
vor 16 Jahren

Wenn ich deiner Beschreibung richtig entnehme, das es sich um eine HTML-Seite handelt, brauchst du das nicht selbst parsen und kannst sie theoretisch (wenn sie wohlgeformt ist) in ein XMLDocument laden und da dann z.B. Links raussuchen oder Mailadressen.

Gruß David

N
Nyrk Themenstarter:in
11 Beiträge seit 2008
vor 16 Jahren

Das Problem dabei ist die Form der Datenausgabe...
Es handelt sich also um eine Wetterdaten Seite...die Erlaubnis zum auslesen liegt vor.

Die Daten liegen per JavaScript Array in folgender Form vor:



<script language=JavaScript>
daten[1]='4°C','12km','u.s.w';
daten[2]='7°C','18km','u.s.w';
</script>


Wie kann ich jetzt diese Daten am besten parsen.

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo Nyrk,

da passt Regex wirklich gut.

herbivore

N
Nyrk Themenstarter:in
11 Beiträge seit 2008
vor 16 Jahren

ok, ich hab mich jetzt ein bischen mit regex befasst und einiges herausgefunden...sogar das tutorial hier aus dem forum hab ich gelesen...

leider weiß ich nicht wie ich von daten[irgendwas] bis ; alles rausfiltern und dann nur noch die Speratoren entfernen soll..

Hat jemand nen Tipp?

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo Nyrk,

Hat jemand nen Tipp?

ja, noch ein bisschen weiter probieren. Vielleicht auch mit Hilfe von On-the-fly Regex-Tester: Regex-Lab . Und wenn du dann nicht weiterkommst, deinen Pattern zeigen und schreiben, was genau daran noch nicht stimmt.

herbivore

N
Nyrk Themenstarter:in
11 Beiträge seit 2008
vor 16 Jahren

ich denke ich liege komplett falsch...hier mein versuch:


"daten[[0-9]](.*);"

Aber ich denke das ist nicht wirklich richtig...

N
Nyrk Themenstarter:in
11 Beiträge seit 2008
vor 16 Jahren

Ok, mit deinem genialen Tool sieht mein Patern jetzt so aus:


daten\[[0-9]\]:(.*);

Doch in C# bekomme ich Compilerfehler CS1009 ich muss also irgendwie die \ ersetzen..

5.742 Beiträge seit 2007
vor 16 Jahren

Hallo Nyrk,

suche mal nach Escape-Sequenzen - Du kannst entweder den Backslash verdoppeln oder vor den String ein @-Zeichen setzen. Dann sollte es funktionieren.

N
Nyrk Themenstarter:in
11 Beiträge seit 2008
vor 16 Jahren

das hab ich auch schon getestet... leider bekomme ich kein ergebnis:


void Button1Click(object sender, EventArgs e)
		{
			Regex myregex = new Regex("daten\\[[0-9]\\]:(.*);");
			textBox1.Text = myregex.Match(textBox2.Text).ToString();
		}

N
Nyrk Themenstarter:in
11 Beiträge seit 2008
vor 16 Jahren

ok, war zu trottelig, jetzt gehts, vielen dank!

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo Nyrk,

"daten\[[0-9]\]:(.*);"

gerade bei Regex ist die Verwendung von @ vor String-Literalen sehr praktisch. Siehe [FAQ] Was bedeutet das @ (=at) vor String-Literalen?

... mit deinem genialen Tool ...

Freut mich!

herbivore

N
Nyrk Themenstarter:in
11 Beiträge seit 2008
vor 16 Jahren

noch mal eben schnell:

wie kann ich jetzt die Groupwerte auslesen? denn mein String steht in Group 1

5.742 Beiträge seit 2007
vor 16 Jahren

Hallo Nyrk,

schaue doch mal in die :rtfm: MSDN - Doku. Dort findest du die Antwort auf deine Frage.

N
Nyrk Themenstarter:in
11 Beiträge seit 2008
vor 16 Jahren

ok, vielen Dank..

N
Nyrk Themenstarter:in
11 Beiträge seit 2008
vor 16 Jahren
regex Problem!

Hallo,

ich habe folgendes Problem.... und zwar hier erst mal der Inhalt

Inhalt:


daten[1]:'hallo','test';

JEtzt habe ich zuerst alles zwischen daten[irgendwas]: und ; gefunden...
Dann mit dem zweiten Pattern möchte ich alles zwischen ' und ' haben.

Also hab ich folgenden Code genommen...


void Button1Click(object sender, EventArgs e)
		{
			Regex myregex = new Regex("daten\\[[0-9]\\]:(.*);");
			Match m = myregex.Match(textBox2.Text);
			String s = m.Groups[1].Value.ToString();
			
			Regex myregex1 = new Regex("[0-9a-zA-Z]*[0-9a-zA-Z]");
			Match m1 = myregex1.Match(s);	
		}

Jetzt bekomm ich mit dem unteren Pattern auch hallo als String zurück, doch ich möchte auch test haben...wie mach ich das?

C
79 Beiträge seit 2006
vor 16 Jahren

wieso machst es so umständlich?
du kannst einfach 2 splits machen wenn die Struktur immer gleich ist!

mfg

N
Nyrk Themenstarter:in
11 Beiträge seit 2008
vor 16 Jahren

wie mach ich das denn?

ich habe nach dem ersten regex ja immer '1','2','3','u.s.w.'

Gruß

Nyrk

P.S. Ich würde trotzdem gerne wissen wie ich dann die anderen patternergebnisse bekomme wenn ich eine nicht gierige einstellung nehme!