Laden...

MatchCollection Problem bei Verwendung von Regex

Erstellt von Bergrath vor 16 Jahren Letzter Beitrag vor 16 Jahren 1.392 Views
B
Bergrath Themenstarter:in
57 Beiträge seit 2007
vor 16 Jahren
MatchCollection Problem bei Verwendung von Regex

Hi Leute.

Ich durchsuche eine Textdatei mit Regex nach bestimmten Ausdrücken. Diese Ausdrücke kommen auch mehrmals vor, aber ich erhalte immer nur einen einzelnen Wert zurück.Da ich MatchCollection verwende müssten eigentlich doch mehrere Ergebnisse dabei rauskommen wenn der Ausdruck mehrmal vorkommt, oder?

Ich poste hier mal meinen Code und vielleicht erkennt jemand von euch wo das Problem liegen könnte. Also warum immer nur ein einzelner Wert zurück gegeben wird.



          MatchCollection mc;
          String[] results = new String[120];
          int[] matchposition = new int[120];

          Regex r = new Regex("[[2][3][D][=][S][W][A-Z][A-Z][$]");
          mc = r.Matches(gekürzteSolve);
          

          for (int i = 0; i < mc.Count; i++)
          {
              results[i] = mc[i].Value;
              matchposition[i] = mc[i].Index;
              textBox2.Text = results[i];
          }
            

Ich habe es auch mit Quantoren probiert, aber das ändert auch nichts am Ergebnis.

Für Tipps wäre ich sehr dankbar.

MfG

K
79 Beiträge seit 2006
vor 16 Jahren

Hallo Bergrath,

der Code an sich sollte funktionieren (habs hier auch nochmal 1 zu 1 übernommen und getestet). Kann mir höchstens vorstellen das etwas mit deinem String nicht stimmt den du übergibst. Vielleicht könntest du hiervon noch einen kleinen Auszug schicken, um das nochmal zu überprüfen.

Oder du übergibst an r.Matches einfach einen String bei dem du dir 100% sicher sein kannst das mehrere Treffer vorkommen müssen. Ich hab dafür z.B.

mc = r.Matches("23D=SWA$ 23D=SWAA$ 23D=SWAA$");

um es zu testen.

Mfg

B
Bergrath Themenstarter:in
57 Beiträge seit 2007
vor 16 Jahren

hi Killerhase.

Den String lese ich vorher ein und lasse ihn mir in einer Textbox anzeigen, was auch funktioniert. Ich poste hier mal den gesamten Code. Ich glaube nicht, dass es am übergebenen String liegt, aber vielleicht irre ich mich ja. Hier mein Code:


 private void button3_Click(object sender, EventArgs e)
        {
            StreamReader sr = new StreamReader("MSDV.txt");

            string matchstr = "SOLVE SFI";
            string searchedstr = sr.ReadToEnd();
            int[] allOccurences = FindAll(matchstr, searchedstr, 0);
            gekürzteSolve = searchedstr.Remove(allOccurences[0]);
            
          textBox1.Text = gekürzteSolve;


          MatchCollection mc;
          String[] results = new String[120];
          int[] matchposition = new int[120];

          Regex r = new Regex("[[2][3][D][=]{10}[S][W][A-Z][A-Z]]");
          mc = r.Matches(gekürzteSolve);
          

          for (int i = 0; i < mc.Count; i++)
          {
              results[i] = mc[i].Value;
              matchposition[i] = mc[i].Index;
              textBox2.Text = results[i];
          }
            
        }

        
    }

Vielen Dank im Voraus für die Tipps.

MfG

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo Bergrath,

textBox2.Text = results[i];  

du überschreibst den Inhalt der TextBox jeweils mit dem aktuellen Wert. Natürlich steht am Ende nur der letzte Wert drin.

herbivore

B
Bergrath Themenstarter:in
57 Beiträge seit 2007
vor 16 Jahren

hi.

habe es jetzt probiert indem ich i inkrementiert habe am Ende der Schleife, leider ohne Erfolg.
Die Textbox steht auf Multiline und es gibt mehrere Treffer, aber angezeigt wird nur ein Treffer. Welchen Befehl gibt es, dass die Textbox in eine neue Zeile springt und die Ergebnisse anzeigt.
Ich habe es mit Environment.NewLine probiert, aber das funktioniert auch nicht.

Wie kann ich es realisieren, dass mehrere Treffer in der Textbox erscheinen.
Ich steh auf dem Schlauch und wäre für Tipps sehr dankbar.

MfG

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo Bergrath,

das sind wirklich Grundlagen, die wir voraussetzen. Bitte eigne dir sowas selber an.

TextBox.AppendText

herbivore

B
Bergrath Themenstarter:in
57 Beiträge seit 2007
vor 16 Jahren

hi.

Erstmal vielen Dank für die schnelle Antwort.

Aber dieses AppendText ist ja dafür da, um Text anzuhängen. Damit erhalte ich ja eine durchgehenden String.

Gibt es nicht einen Befehl mit dem die Textbox in eine neue Zeile springt bei jedem Treffer? Ich finde nichts bei den möglichen Befehlen für die Textbox, oder übersehe ich etwas?

Vielen Dank für Tipps im Voraus.

MfG

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo Bergrath,

Environment.NewLine hattest du ja nun schon selbst genannt.

herbivore

183 Beiträge seit 2004
vor 16 Jahren
TextBox.SelectionStart = TextBox.Text.Length;
TextBox.ScrollToCaret();

?(

So einfach wie möglich, aber nicht einfacher. [Albert Einstein]

take a look at
* baer-torsten.de
* codinghints