Laden...

Regex Filter für Variabeln

Erstellt von FrankenDerStein vor 3 Jahren Letzter Beitrag vor 3 Jahren 1.133 Views
FrankenDerStein Themenstarter:in
72 Beiträge seit 2015
vor 3 Jahren
Regex Filter für Variabeln

Hallo Kollegen,

Ich habe folgendes Problem:

Ich arbeite an einem Programm das bestimmte variablen aus einem C# Script ersetzt.

Hierzu versuche ich ein Regex zu schreiben, welches mir die Wörter filtert.

Leider bin ich ein Anfänger in Regex und habe Schwierigkeiten da durch zu steigen.

ich versuche mich schon eine weile daran, aber bisher hat der einfachste filter hierfür nicht funktioniert.

Folgende Anforderung habe ich an den Filter:

  1. Das gesuchte Wort darf nicht in einem Kommentar block stehen (// oder /* */).
  2. Das gesuchte Wort darf nicht in einem Feld aus Anführungszeichen stehen ("...").
  3. Das Wort darf sich nicht innerhalb eines Wortes befinden und es dürfen nur Sonderzeichen am Wort angrenzen und keine Zahlen oder Buchstaben.
  4. Auf Groß- und Kleinschreibung ist zu achten.

Mein erster Versuch beschäftigte sich nur mit der 1. Anforderung, leider gelang es mir bisher nicht das gewünschte Resultat zu erzielen:


(?(?=(?![\/]))\bHase\b)

Das Wort "Hase" sollte dabei aus diesem Text heraus gefiltert werden:

Der Hase hüpft herum. // Nur der Hase ganz allein.
// Vor Regen hatte der Hase keine Angst!

Das Resultat sollte der erste Hase im ersten Satz sein, der heraus gefiltert werden sollte.

Ich hoffe einer kann mir hier bei helfen.

Mit freundlichen Grüßen

FrankenDerStein

4.931 Beiträge seit 2008
vor 3 Jahren

RegEx ist für diesen Fall nicht zu empfehlen, da Programmiersprachen (wie C#) mind. kontextfreie Sprachen (Typ 2) und keine Regulären Sprachen (Typ 3) sind (s.a. Chomsky-Hierarchie).

Da wirst du einen Parser für C# benötigen, s.z.B. Parser for C#.

49.485 Beiträge seit 2005
vor 3 Jahren

Hallo FrankenDerStein,

obwohl ich bekennender Regex-Fan bin, muss auch ich dir abraten. Wenn überhaupt müsste man das in Schritten machen, also erst die Kommentare rausschmeißen, dann die Strings und dann die Ersetzung durchführen, nur ist dein Script dann schon verhunzt. Das nützt dir also nichts.

Wenn man versucht, einen Pattern zu bauen, der alles auf einen Rutsch erschlägt, wird das irrsinnig komplex. Da würde ich schon lange basteln müssen und das Ergebnis wäre unbefriedigend, da fehleranfällig und unwartbar. Als Anfänger wird das erst recht nichts.

Die Punkte 3 und 4 sind nicht das Problem (sogar ganz easy), sondern die Kombination von 1 und 2 mit 3 und 4. Schon 1 kombiniert mit 3 und 4 oder 2 kombiniert mit 3 und 4 wären umständlich, aber 1 und 2 kombiniert mit 3 und 4, unrealistisch.

Wenn nicht per Parser, dann müsste man das ausprogrammieren. Und das würde einigermaßen leicht gehen. Per Zustandsautomat einfach Zeichen per Zeichen durch die Eingabe laufen und dann weiß man mit ein wenigen Abfragen immer ganz genau, ob man gerade in einen Kommentar ist oder in einem String oder eben im eigentlichen Codebereich. Und auch hier ist es kein Problem zu wissen, ob man gerade an einer Wortgrenze ist. Und Groß- und Kleinschreibung ist auch kein Problem. Das würde also einigermaßen überschaubar gehen, ohne dass man sich in einen Parser einarbeiten muss.

herbivore

FrankenDerStein Themenstarter:in
72 Beiträge seit 2015
vor 3 Jahren

Ich bedanke mich für eure Hilfe.
Ich werde euren Rat befolgen und ein Parser benutzen.
Mit freundlichen Grüßen.