Probleme mit Regex und Auslesen

hauke1981

Erfahrenes Mitglied
Hi,
da bin ich mal wieder mit einer Frage. Ich suche mit folgendem Code nach Regex in einem Array.

Code:
List<string> testen = new List<string>();
            string start = @"GetValueForID";
            string end = ")";
            Regex expressionStart = new Regex(start);
            try
            {
                foreach (string element in strArray)
                {
                    if (expressionStart.IsMatch(element))
                    {
                        int startindex = element.IndexOf(start) + start.Length + 2;
                        int endindex = element.IndexOf(end, startindex) - 1;

                        string id = element.Substring(startindex, endindex - startindex);
                        //string whitespace = element.Trim();
                        testen.Add(id);
                        //testen.Add(whitespace);
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(),"Failure");
            }

Jetzt hab ich aber das Problem, dass mein Programm immer stehen bleibt wenn es in einer Datei auf einen Zeilenumbruch stößt, ich meine damit, dass es zwar den Regex findet, aber nach diesem ein zeilenumbruch in der datei ist und mein Programm daher nichts findet da das was rausgefiltert werden soll in einer neuen Zeile ist.
Wie krieg ich es hin, dass nicht nur in einer Zeile sondern in mehreren Zeilen, mind. 2 Zeilen gelesen wird.

Hoffe einer kann mir helfen. Grüße
 
du musst als RegexOptions Singleline angeben, dann wird alles sozusagen als ein string ausgewertet (genaueres kann dir msdn sagen).

Wobei ich aber bei dir keinen Sinn für Regex sehe.
Beim Typ string gibt es die Methode Contains, prüf doch direkt damit ab.
Sollte sogar auch performanter sein.

Oder vielleicht sogar noch besser direkt mit IndexOf prüfen
(dort kannst du auch angeben ob Groß- und Kleinschreibung beachtet werden soll).

Müsstest es also nur wie folgt umbauen:
Code:
int startindex = element.IndexOf(start, StringComparison.CurrentCultureIgnoreCase);
if(startindex >=0)
{
  startindex += start.Length + 2;
  ...
}
(In meinem Beispiel wird jetzt Groß- und Kleinschreibung nicht beachtet)
 
Hi,
habs ausprobiert komme aber immer wieder auf den gleichen Fehler.

Kann ich das Problem lösen, wenn ich zum Beispiel die Leerzeichen und Zeilenumbrüche in meinem String lösche? wenn ja sollte das doch dann mit replace(zeilenumbrüche, "") gehen oder
:confused::confused:
 
Meinst mit gleichen Fehler das das Programm stehen bleibt?

Ist das oben der original Quelltext?
Den aus dem Code wird mir nicht ersichtlich warum das Programm stehen bleiben sollte.

Was verstehst du unter stehen bleiben?

Wenn das Programm steht bleibt, drück mal Pause in der IDE und schau mal nach wo der debugger gerade ist. Geh dann Schritt für Schritt mit dem debugger weiter.

Edit:
Glaube nicht das es an den Zeilenumbrüchen liegt.
 
Mit stehenbleiben meine ich folgenden Fehler:

Code:
"Eine Ausnahme (erste Chance) des Typs "System.ArgumentOutOfRangeException" ist in mscorlib.dll aufgetreten.

Zusätzliche Informationen: Der Index lag außerhalb des Bereichs. Er muss nicht negativ und kleiner als die Auflistung sein."

Der Quelltext oben ist ein Auszug aus dem Originalquelltext, denke auch nicht das es an diesem liegt, sondern eher daran, dass ich immer bei Leerzeichen im string auf die oben aufgeführte Exception stoße.

An was denkst du liegt es dann
 
nein
die Fehlermeldung besagt ungefähr so viel als das du versucht auf eine Indexposition zu zugreifen die garnicht existiert. (Sehe grad steht ja auch drunter ^^)

Am besten du setzt mal im catch einen Breakpoint und schaust dir den Stacktrace der Exception an, dort sollte dir aufgezeigt werden in welcher Zeile der Fehler auftritt.

Ich vermute mal der Fehler liegt am Substring das die Länge für den zu ermitteltenden Text (endindex - startindex) + StartIndex über die Länge von element hinaus geht.

Edit:
Oder es kracht schon bei der ermittlung von endIndex,
 
Alles klar werde ich mal machen,

ach übrigends du hast recht das genau an der Stelle bei Substring die Exception auftritt. :)

Wie kann ich den einen String nach einem Regex absuchen? Mit foreach geht das ja dann nicht oder? (Nur als hoffentlich kleine Frage am Rande;) )
 
Wie kann ich den einen String nach einem Regex absuchen? Mit foreach geht das ja dann nicht oder? (Nur als hoffentlich kleine Frage am Rande;) )

Du siehst ja er springt rein also ist alles ok beim Regex.
Das problem ist du willst mehr abschneiden als der string dir zulässt.

Ich vermute mal es liegt höchst wahrscheinlich am startIndex+2, das du dir da zu viel Zeichen rausnimmst.
 
Zurück