2016-09-17 3 views
1

Ich möchte eine sehr einfache Sache wissen: endet eine Zeichenfolge mit einem Backslash ja oder nein?Reguläre Ausdrücke unter Microsoft

string bla = @"C:\"; 
if (! Regex.IsMatch(bla, "\b$")) { bla = bla + @"\"; } 

Aber es funktioniert nicht. Ich möchte einen Schrägstrich hinzufügen, wenn am Ende der Zeichenfolge kein Schrägstrich angezeigt wird. Ich habe versucht, mehr Möglichkeiten, auch wenn ich nur versuchen, einen umgekehrten Schrägstrich entsprechen, ohne dass es am Ende der Kette zu sein, es ist ein großes Problem:

Regex.IsMatch(bla, "\b") // Not working 
Regex.IsMatch(bla, @"\") // Giving me and exception even! 
Regex.IsMatch(bla, @"\\$") // not working 

ich aus Optionen bin. Wie die .... kann ich einen Backslash mit C# abgleichen?

+0

Sie müssen Verwenden Sie zwei Backslashes (wenn Sie @ verwenden). Da der Backslash-Charakter ein Sonderzeichen ist, müssen Sie es entkommen – Charleh

+1

Ich habe das auch versucht, funktioniert nicht ... Nichts funktioniert. Microsoft kann ich verwenden \ b und das funktioniert auch nicht. – Saskia

+0

Wenn Sie mit Pfaden arbeiten, könnte [System.IO.Path] (https://msdn.microsoft.com/en-us/library/system.io.path (v = vs.110) .aspx) möglicherweise dir helfen. – Filburt

Antwort

6

Ich möchte eine sehr einfache Sache wissen: endet ein String mit einem Backslash ja oder nein.

Dann brauchen Sie nicht regex ...

string str = "your string here"; 
str.EndsWith(@"\"); // true or false 

Wenn Sie es wirklich die Regex Weg aber tun wollen, müssen Sie nur sicherstellen, dass Ihre Regex korrekt ist. Dies sollte funktionieren:

.*\\$ 

.* will match any optional leading characters 
\\ will match the '\' and has been escaped with another '\' 
$ will match until the end of your string. 
+0

Vielen Dank !!! Schließlich funktioniert das. Ich bin jedoch immer noch sehr neugierig, warum Regex nicht an so einer einfachen Aufgabe arbeitet. – Saskia

+0

Siehe meinen aktualisierten Kommentar. Es gibt keine Möglichkeit, dass Ihre Regexes funktionieren würden, weil es buchstäblich nach einer Zeichenfolge sucht, die nur einen Backslash und sonst nichts enthält. Das ist nur in jeder Programmiersprache ungültig. Es gibt andere Zeichen in deiner Zeichenkette, also sollte deine Regex diese auch behandeln (im Falle meiner Regex: sie ignorierend). –

+0

Ja, ich habe das auch versucht, angefangen mit. * Obwohl ich "^" nicht benutzt habe, aber das hat auch nicht funktioniert. Nun, ich schätze, ich werde Regex vergessen und versuchen, es während dieses Projekts zu vermeiden. Ich bin sehr glücklich mit Ihrer Option EndsWith. – Saskia

0

Ihr Code nicht becuase statische Methode funktioniert Regex.IsMatch zwei Parameter hat ..

public static bool IsMatch(string input, string pattern) 
{ 
    return new Regex(pattern).IsMatch(input); 
} 

So sollten Sie einen Versuch mit:

if (!Regex.IsMatch(bla, @".*\\$")) 
+0

Sorry, das war ein Tippfehler, natürlich habe ich zwei Optionen eingegeben, sonst würde es nicht kompilieren. Ich werde die Frage nur für den Fall aktualisieren. Wie auch immer, dein Beispiel hat auch nicht funktioniert, ich habe eine Million Dinge ausprobiert. Ich werde versuchen, Regex vollständig unter Microsoft zu vermeiden, es funktioniert nicht wie erwartet. – Saskia

+0

'@" C: \ "' ist '" C: \\ "' '@". * \ $ "' Ist falsch, da das letzte Zeichen, das parseRegex fehlt, '@". * \\ "' korrekt ist wie es übersetzt werden wird, um nach einem String mit zwei "" "am Ende zu suchen - das ist eine knifflige, doppelte Zeichencodierung, eine für C# -String und eine andere für eine Regex-String. –

+0

Nur aus Neugier, habe ich versucht, was Sie vorgeschlagen, aber es stimmte nicht überein. Es macht auch keinen Sinn, dass es vom Anfang der Zeichenfolge übereinstimmt, wenn Sie "^" nicht angeben. – Saskia