Reguläre Ausdrücke

Hallo,

ich möchte aus einem String einen bestimmten Teilstring per Regex ermitteln.

Mein Code sieht momentan so aus:

string line = " load test.txt ; Kommentar";
string pattern = @"(\s\*)(?[^;]\*[\w$])";
Regex reg = new Regex(pattern);
Match m = reg.Match(line);
string content = m.Groups["cont"].Value;

Ich übergebe einen String, der an beliebigen Stellen Whitespaces oder ein Kommentarzeichen (:wink: haben kann.
Mein Ziel ist es, nur den relevanten Inhalt zu ermitteln, also „load test.txt“ ohne Kommentare und Whitespaces am Anfang und Ende.
Das Ganze funktioniert soweit ganz gut.
Falls aber eine fehlerhafte Eingabe vorkommt, z.B. „load test.txt±“, dann wird mein resultierender String trotzdem durch [\w$] auf „load test.txt“ gekürzt und ich bekomme den Fehler nicht mit. Soweit aber logisch.

[\w$] bedeutet für mich, dass das letzte Zeichen des Strings ein Wortzeichen ist. Da ich aber erreichen will, dass alle Zeichen beachtet werden die keine Whitespaces sind, habe ich [\S$] eingefügt und erhalte „load test.txt± ;“. An dieser Stelle hätte ich "load test.txt±"erwartet. Erweitere ich hingegen [\w$] auf [\w±$], bekomme ich „load test.txt±“. Ich möchte aber nicht jedes Sonderzeichen manuell ergänzen, sondern einen allgemeinen Ausdruck wie \S benutzten.

Hat jemand eine Idee, wo mein Denkfehler liegt.

Danke & Gruß
ziba

Hi!
Hatte jetzt zwar keine Zeit, mich da tiefer reinzudenken, aber bist Du Dir z.B. sicher, dass $ innerhalb von [] nicht als Zeichen interpretiert wird?
Ansonsten gibt’s z.B. hier: http://www.codeproject.com/useritems/RegularExpressi…
ein recht praktisches Testprogramm zum schnellen Ausprobieren von RegEx’s.

Gruß,
Martin

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Martin,

bist Du Dir z.B. sicher, dass $ innerhalb von [] nicht als
Zeichen interpretiert wird?

Du hast natürlich recht. Das $ hat in der Klammer nix zu suchen.
Bin mir aber nicht ganz sicher, ob man alles in einen Ausdruck packen kann, weil der Inhalt des zu untersuchenden Strings keiner genauen Norm unterliegt. Es kann ein Kommentar vorkommen, muss aber nicht,…
Wenn immer ein Kommentar vorhanden wäre, könnte ich den Ausdruck

(\s\*)(?[^;]\*?)(\s\*:wink:

nutzen.
In meinem Programm muss ich das Trimmen des Strings sowieso noch einmal durchführen. Brauche also nicht unbedingt nen Regex, der die Leerzeichen am Ende entfernt.

Gruß
ziba