myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Rund um die Programmierung » Regex Filter für Variabeln
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Regex Filter für Variabeln

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
FrankenDerStein FrankenDerStein ist männlich
myCSharp.de-Mitglied

avatar-4129.gif


Dabei seit: 18.06.2015
Beiträge: 52
Entwicklungsumgebung: Visual Studio Ultimate 2013
Herkunft: Deutschland


FrankenDerStein ist offline

Regex Filter für Variabeln

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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:

Code:
1:
(?(?=(?![\/]))\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 02.06.2020 15:08.

Neuer Beitrag 02.06.2020 15:03 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Th69
myCSharp.de-Poweruser/ Experte

avatar-2578.jpg


Dabei seit: 01.04.2008
Beiträge: 3.636
Entwicklungsumgebung: Visual Studio 2015/17


Th69 ist online

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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#.
Neuer Beitrag 02.06.2020 15:18 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
herbivore
myCSharp.de-Poweruser/ Experte

avatar-2627.gif


Dabei seit: 11.01.2005
Beiträge: 49.475
Entwicklungsumgebung: csc/nmake (nothing is faster)
Herkunft: Berlin


herbivore ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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
Neuer Beitrag 03.06.2020 07:19 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
FrankenDerStein FrankenDerStein ist männlich
myCSharp.de-Mitglied

avatar-4129.gif


Dabei seit: 18.06.2015
Beiträge: 52
Entwicklungsumgebung: Visual Studio Ultimate 2013
Herkunft: Deutschland

Themenstarter Thema begonnen von FrankenDerStein

FrankenDerStein ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ich bedanke mich für eure Hilfe.
Ich werde euren Rat befolgen und ein Parser benutzen.
Mit freundlichen Grüßen.
Neuer Beitrag 02.07.2020 09:10 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als ein Monat.
Antwort erstellen


© Copyright 2003-2020 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 04.07.2020 11:48