Hallo,
Ich habe ein Problem und zwar möchte ich eine Homepage parsen. Dazu möchte ich den Quelltext bei jedem </tr> teilen und den Text davor in ein array speichern. Habe es schon mit string.Split(); versucht, aber da kann man ja nur einzelne Zeichen und kein String angeben.
hier mal ein Beispiel:
<table>
<tr>
<td>Test1</td>
<td>Test2</td>
<td>Test3</td>
</tr>
<tr>
<td>Test4</td>
<td>Test5</td>
<td>Test6</td>
</tr>
</table>
und ich möchte folgendes haben:
Array[0][0] = Test1
Array[0][1] = Test2
Array[0][2] = Test3
Array[1][0] = Test4
Array[1][1] = Test5
Array[1][2] = Test6
Vielleicht könnte man es auch irgendwie mit Regex machen, aber bei meinem Versuch hat mein Regex einfach vom ersten <tr> bis zum letzten </tr> , und nicht, wie ich wollte vom ersten <tr> bis zum nächsten </tr> gematched. Gibt es kein modifier, wie in PHP der modifier U (Ungreedy)?
Ich verzweifel noch, in PHP war das alles so einfach ... 🙂
MFG TripleX
Träume nicht dein Leben sondern lebe deinen Traum.
Viele Grüße, David Teck
string[] tokens = meinHomepageQuellCode.Split();
foreach(string token in tokens)
{
if(token == "<tr>")
//mach was
if(token == "</tr>")
//mach was anderes
}
Das sollte für einen simplen Parser der nach <tr> und </tr> tags sucht ausreichen.
"It is not wise to be wise" - Sun Tzu
Nimm den SGML-Reader, der kann parsen: http://www.gotdotnet.com/Community/UserSamples/Details.aspx?SampleGuid=b90fddce-e60d-43f8-a5c4-c3bd760564bc
Regex wäre auch ne gute Idee
Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...
Original von TripleX
Gibt es kein modifier, wie in PHP der modifier U (Ungreedy)?
.* -> .*?
Vielen Dank ZiMD das hat mir weitergeholfen.
Ich habe jetzt folgenden Code:
string text;
string[][] spieler = new String[100][];
Regex r;
text = browser.DocumentText;
r = new Regex(@"<tr>(.*?)</tr>");
MatchCollection mc1 = r.Matches(text);
for (int i = 0; i < mc1.Count; i++)
{
r = new Regex(@"<tr>(.*?)</tr>");
MatchCollection mc2 = r.Matches(mc1[i].Value);
}
Wie kann es _mc2 _so mit _spieler _verknüpfen, damit ich ein Array wie oben erhalte?
habe es schon mit mc2.CopyTo(spieler, i);_ oder spieler[j] = mc2[j]; _versucht, das funktioniert aber nicht, weil da kommt immer folgender Fehler:
System.ArgumentNullException: Der Wert darf nicht NULL sein.
Träume nicht dein Leben sondern lebe deinen Traum.
Viele Grüße, David Teck