Ziel:
Stellen Sie sicher, dass die Daten1 und der gesamte Weg zu data31 korrekt sind und data4 und der gesamte Weg zu data7 ein Fehler mit Unterstützung von Regex ist

 Regex regexp = new Regex(@"^[a-zA-Z]:\\.*$");

In C #.

Problem:
data6 und data7 sollen fehlerhaft sein, aber stattdessen ist es korrekt.

Ich weiß nicht, wie ich es lösen soll.

    Regex regexp = new Regex(@"^[a-zA-Z]:\\.*$");

    //Correct result
    string data1 = "C:\\33\\dd\\Desktop\\151222055438.txt";
    string data2 = "c:\\ff\\ded\\Desktop\\151222055438.txt";
    string data3 = "Z:\\ss\\gg\\Desktop\\151222055438.txt";
    string data31 = "d:\\da\\ds\\Df\\ff.txt";

    //Error result
    string data4 = "3:\\rr\\555\\Desktop\\151222055438.txt";
    string data5 = "d\\33\\4\\Desktop\\151222055438.txt";
    string data6 = "s:\\\\rr\\d\\Desktop\\151222055438.txt";
    string data7 = "s:\\\\\\f\\f\\Desktop\\151222055438.txt";


    if (regexp.Match(data1).Success)
    {
        int correct = 23;
    }

    if (regexp.Match(data2).Success)
    {
        int correct = 23;
    }

    if (regexp.Match(data3).Success)
    {
        int correct = 23;
    }

    if (regexp.Match(data31).Success)
    {
        int correct = 23;
    }



    if (regexp.Match(data4).Success)
    {
        int error = 23;
    }

    if (regexp.Match(data5).Success)
    {
        int error = 23;
    }

    if (regexp.Match(data6).Success)
    {
        int error = 23;
    }

    if (regexp.Match(data7).Success)
    {
        int error = 23;
    }

    int sds = 23;
0
What'sUP 29 Dez. 2015 im 10:26

3 Antworten

Beste Antwort

Dieses Problem wurde in einer Antwort auf Ihre ursprüngliche Frage behoben. Sie müssen es nur anpassen, um mit einfachen statt doppelten Backslashes zu arbeiten:

var regexp = new Regex(@"^[a-zA-Z]:(\\[^\\]+)+$");

\\ entspricht einem einzelnen Backslash (da \ in einem wörtlichen Zeichenfolgenliteral nichts Besonderes ist, in einem regulären Ausdruck jedoch etwas Besonderes). Dann entspricht [^\\]+ einem oder mehreren Zeichen außer Backslash. Das ist das Verzeichnis oder der Dateiname.

1
Community 23 Mai 2017 im 12:23

Ich habe Ihren Ausdruck geringfügig geändert, sodass er wie folgt lautet: ^[a-zA-Z]:(\\{2}[a-zA-Z0-9.]+)+$ (Beispiel verfügbar hier).

In Ihrem Fall scheinen Sie explizit nach Paaren von \ Zeichen zu suchen, was das \\{2} tut. Außerdem scheinen Sie zwischen den Paaren von \ nur Buchstaben und Zahlen zu akzeptieren. Am Ende scheinen Sie auch nach historischen Zeichen zu suchen.

1
npinti 29 Dez. 2015 im 07:34

Versuche dies

Regex regexp = new Regex(@"^[a-zA-Z]:(\\{2}[a-zA-Z\d]+)+(\\{2}[\d]+)*.txt$");

WENN Ihre Dateien die Erweiterung ".txt" haben und nur Ziffern im Namen haben, funktioniert dies möglicherweise noch besser.

Der Grund für zwei Schrägstriche "\\" ist ein Backslash. da es einen einzelnen Backslash als Escape-Zeichen betrachtet.

0
Maulik Modi 29 Dez. 2015 im 08:40