Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Regex Filter für Variabeln
FrankenDerStein
myCSharp.de - Member

Avatar #avatar-4129.gif


Dabei seit:
Beiträge: 59
Herkunft: Deutschland

Themenstarter:

Regex Filter für Variabeln

beantworten | zitieren | melden

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
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von FrankenDerStein am .
private Nachricht | Beiträge des Benutzers
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 4132

beantworten | zitieren | melden

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#.
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
FrankenDerStein
myCSharp.de - Member

Avatar #avatar-4129.gif


Dabei seit:
Beiträge: 59
Herkunft: Deutschland

Themenstarter:

beantworten | zitieren | melden

Ich bedanke mich für eure Hilfe.
Ich werde euren Rat befolgen und ein Parser benutzen.
Mit freundlichen Grüßen.
private Nachricht | Beiträge des Benutzers