Regulärer Ausdruck, um Backslash in C # zu erlauben

7

Kann mir jemand Regex für die Überprüfung von Strings zur Verfügung stellen, die nur Sonderzeichen außer Backslash zulassen sollten. Ich habe es versucht

%Vor%

Aber es scheint nicht zu funktionieren

    
Suhaib 01.02.2013, 07:04
quelle

3 Antworten

17

Backslashes müssen in regulären Ausdrücken maskiert werden - und auch müssen in C # maskiert werden, es sei denn, Sie verwenden Verbatim String-Literale . Also sollte einer von beiden funktionieren:

%Vor%

Beide stellen sicher, dass der folgende Zeichenfolgeninhalt an den Regex -Konstruktor übergeben wird:

%Vor%

Der Regex -Code sieht dann den doppelten Backslash und behandelt ihn wie "Ich möchte wirklich den umgekehrten Schrägstrich anpassen".

Grundsätzlich müssen Sie immer zwischen "den String-Inhalten, die Sie an die Regex-Engine übergeben wollen" und "der String-Literal-Darstellung im Quelltext" unterscheiden. (Dies gilt natürlich nicht nur für reguläre Ausdrücke. Der Debugger hilft nicht, indem er in Überwachungsfenstern usw. entweicht.)

BEARBEITEN: Jetzt, wo die Frage bearbeitet wurde, um zu zeigen, dass Sie ursprünglich drei Backslashes hatten, ist das einfach nicht gültig C #. Ich verdanke , dass du nach "einer Zeichenfolge mit drei umgekehrten Schrägstrichen" strebst, die eine der folgenden sein würde:

%Vor%

... aber Sie müssen nicht den Raum verlassen, soweit der reguläre Ausdruck betroffen ist.

    
Jon Skeet 01.02.2013 07:07
quelle
8

Sie müssen entweder doppelt entkommen (einmal für C # und einmal für die Regex-Engine):

%Vor%

Oder Sie können die Funktion für wörtliche Zeichenfolgen von C # verwenden (beachten Sie das @) :

%Vor%

In einem wortwörtlichen String wird der umgekehrte Schrägstrich nicht so interpretiert, als würde er eine Escape-Sequenz starten. Sie müssen ihn also nur einmal für die Regex-Engine ausschließen.

Ich nehme an, dass Ihr aktueller Code nicht kompiliert wird. Es sollte etwas in Anlehnung an die "unerkannte Escape-Sequenz" lauten.
Der Grund dafür ist, dass Sie drei umgekehrte Schrägstriche gefolgt von einem Leerzeichen haben. Die ersten beiden umgekehrten Schrägstriche werden als Escape-Sequenz interpretiert, die einen umgekehrten Schrägstrich darstellen. Der dritte umgekehrte Schrägstrich wird jedoch so interpretiert, dass eine Escape-Sequenz mit einem Leerzeichen als zweitem Zeichen beginnt. Eine solche Escape-Sequenz existiert nicht, was zu dem Fehler führt.

    
Daniel Hilgarth 01.02.2013 07:06
quelle
0

Sie müssten die Zeichenfolge \ für Regex und C # streichen, indem Sie 4 \s hinzufügen, um eine einzelne \ zu finden.

    
Naveed S 01.02.2013 07:06
quelle

Tags und Links