Entwickler-Ecke

Basistechnologien - Regex


Nyrk - Mo 11.02.08 21:06
Titel: Regex
Hallo,


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

Inhalt:

Quelltext
1:
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...



C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
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?

Nyrk


P.S. Crossposting: http://www.mycsharp.de/wbb2/thread.php?threadid=50966
Moderiert von user profile iconChristian S.: C#-Tags korrigiert


Christian S. - Mo 11.02.08 21:12

Hallo und :welcome:!

Ich würde das ein einem Rutsch machen:

Quelltext
1:
^daten\[\d\]:'([^']*?)','([^']*?)';$                    

Irgendwelche Backslashes darfst Du dann selber noch hinzufügen ;-)

Grüße
Christian

//edit: Und wenn Du das nächste Mal dieselbe Frage auch in einem anderen Forum [http://www.mycsharp.de/wbb2/thread.php?threadid=50966&hilight=RegEx] hast, dann mach Dir hier zumindest die Mühe (a) die korrekten C#-Tags zu verwenden und (b) einen Link auf den Thread im anderen Forum zu setzen. Du willst, dass sich hier jemand Mühe macht, also mach Dir bitte auch etwas Mühe.


Nyrk - Mo 11.02.08 21:17

ok, schonmal vielen Dank...

Doch wie springe ich nun zu den Ergebnissen? Denn es gibt ja dann mehrere Ergebnisse bzw. Treffer.

Gruß

Nyrk


Christian S. - Mo 11.02.08 21:21

Wie Du es schon bei Deinem ersten Quelltext gemacht hast: Über die Gruppen.

Der gesamte Match ist Gruppe 0. Die erste Klammer ist Gruppe 1, die zweite Klammer Gruppe 2.


Nyrk - Mo 11.02.08 21:35

Ok, das Problem ist nun, dass es teilweise mehr als 2 Inhalte sind...evtl. manchmal bis zu 20.
Mit deinem Beispiel kann ich ja jetzt nicht dynamisch bestimmen wie ich die Inhalte lese oder?


Christian S. - Mo 11.02.08 21:43

Das hättest Du auch gleich sagen können :?

Dann würd ich mit diesem RegEx auf den String losgehen: '([^']*?)'
Und dann kannst Du über deinRegex.Matches(deinString) alle Matches holen. Jeweils die Gruppe 1 eines jeden Matches dürfte das sein, was Du suchst.


Nyrk - Mo 11.02.08 22:14

ok, das such ich...wie gehe ich denn die matches durch?


Christian S. - Mo 11.02.08 22:18

Am einfachsten in einer foreach-Schleife. Wenn Du die Hilfe zur RegeEx-Klasse aufrufst, gibt's da zwei Beispiele. Das untere zeigt, wie man das macht.