Forum: PC-Programmierung Suche den perfekten regulären Ausdruck in C# für escaped Parameter


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Frank O. (fop)


Lesenswert?

Ich versuche jetzt mal mein Problem auf den Kern zu bringen und den Rest 
so weit wie möglich zu vereinfachen.

Ich möchte aus einer Zeile wie
1
HURZ '42';
das Argument 42 extrahieren und ausserdem testen, ob auch der Rest 
stimmt.

Das Argument darf auch leer sein.

Bis hierhin bin ich bei
1
@"^HURZ '(?<arg>[^']*);$"

Aber : das Argument soll auch ' enthalten dürfen. Dafür wird einfach ein 
\ davor gesetzt. Auch das \ soll im Argument vorkommen dürfen. Dazu wird 
es verdoppelt, also zu \\
1
HURZ '4\'2';
4'2
bekomme ich ja auch noch hin. Dagegen könnte ja auch ein
1
HURZ '42\\';
42\
kommen.

Fällt Euch was ein, was man da nehmen könnte, was genau die erlaubten 
Fälle durchlässt und sonst nix ?

: Bearbeitet durch User
von Sherlock 🕵🏽‍♂️ (rubbel-die-katz)


Lesenswert?

Hast du mal ChatGPT gegragt? Ich meine, das ist ein typischer Fall für 
diese KI.

von Εrnst B. (ernst)


Lesenswert?

Üblicherweise, so seit den 1970ern, lexer&parser.
Wobei dir vmtl. der lexer-teil reicht, wenn da nicht noch dynamische 
Parameter/Ausdrücke dazukommen sollen (HURZ $foo+2*$bar;)

Gibt's auch schöne für C#, die sich direkt inline definieren lassen.

von Clemens L. (c_l)


Lesenswert?

Jedes Zeichen ist entweder nicht escaped oder escaped:
1
@"^HURZ '(?<arg>([^'\\]|\\.)*)';$"

: Bearbeitet durch User
von Frank O. (fop)


Lesenswert?

Jetzt, wo ich's sehe, ist es ganz einfach. Ich hatte versucht, kein 
Hochkomma oder Hochkomma mit Escape zuzulassen, dass ist aber der 
Holzweg, weil es bei meinem letzten Beispiel Mist baut.

Das mit dem Lexer werde ich mir auch mal in Ruhe anschauen, um das ganze 
flexibler zu machen. Momentan liest es nur Dateien nach dem festen 
Schema ein, das ist schonmal viel wert.

von Franko S. (frank_s866)


Lesenswert?

Gruppierung verwenden, dann brauchst du das stümperhafte Gemurkse oben 
nicht.
Lerne die Grundlagen von regex. Wer dazu KI Hilfe braucht sollte auf 
Strassenfeger umschulen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.