2015-12-29 57 views
0

目標:
確保DATA1和一路data31是正確的,DATA4和一路DATA7是錯誤使用C#支持正則表達式Complemetory在自定義的正則表達式代碼

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

的。

問題:
data6和data7應該是錯誤的,但它是正確的。

不知道如何解決它。

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

它看起來像你驗證文件名,爲什麼不使用https://stackoverflow.com/questions/422090/in-c-sharp-check-that-filename-is-possibly-valid-not-that-it-是否存在? –

回答

1

此問題已在answer to your original question中解決。你必須去適應它與單工作,而不是雙反斜線的:

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

\\匹配一個反斜槓(因爲\不在逐字字符串特別,但它是特殊的正則表達式)。然後[^\\]+中的一個或多個匹配,除了反斜槓;這是目錄或文件名。

+0

謝謝你們的幫助! –

1

我作了輕微修改您的表達,使之成爲如下:^[a-zA-Z]:(\\{2}[a-zA-Z0-9.]+)+$(例如,購here)。

就你而言,你似乎正在明確尋找\字符對,這是\\{2}所做的。此外,在\之間,你似乎只接受字母和數字。最後,你似乎也在尋找時代特徵。

0

試試這個

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

如果你的文件有".txt"擴展,並有徒有其名的數字,這可能效果更好。

雙斜槓"\\"的原因是表示反斜槓。因爲它會將單個反斜槓視爲轉義字符。