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
Das Stichwort, wonach du suchen musst, lautet Regex (regulaere Ausdruecke)
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
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
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.
Hallo Nyrk,
da passt Regex wirklich gut.
herbivore
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?
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
ich denke ich liege komplett falsch...hier mein versuch:
"daten[[0-9]](.*);"
Aber ich denke das ist nicht wirklich richtig...
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..
Hallo Nyrk,
suche mal nach Escape-Sequenzen - Du kannst entweder den Backslash verdoppeln oder vor den String ein @-Zeichen setzen. Dann sollte es funktionieren.
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();
}
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
noch mal eben schnell:
wie kann ich jetzt die Groupwerte auslesen? denn mein String steht in Group 1
Hallo Nyrk,
schaue doch mal in die :rtfm: MSDN - Doku. Dort findest du die Antwort auf deine Frage.
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?
wieso machst es so umständlich?
du kannst einfach 2 splits machen wenn die Struktur immer gleich ist!
mfg
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!