2015-10-05 91 views
0

我有以下的正則表達式:C#正則表達式中插入符號和美元符號附加

TEST_(\d{4}).xml.gz 

哪些應符合以下格式的字符串:

TEST_2015.xml.gz 

,我相信這個工程,我有通過Regex測試程序運行它,並在我的C#文件中返回一個匹配項。

此正則表達式也將匹配

sTEST_2015.xml.gz 

OR

TEST_2015.xml.gzc 

這是不是我想要的。

所以我加

^TEST_(\d{4}).xml.gz$ 

,因爲我想它現在將匹配。

目前爲止還不錯。

我的問題是,當我嘗試這種添加到C#正則表達式匹配,模式不再匹配,如下圖所示:

var FileNameRegex = new Regex(@"^TEST_(\d{4}).xml.gz$"); 

我也曾嘗試:

var FileNameRegex = new Regex(@"(^)TEST_(\d{4}).xml.gz($)"); 

var FileNameRegex = new Regex(@"^(TEST_(\d{4}).xml.gz)$"); 

var FileNameRegex = new Regex(@"\^TEST_(\d{4}).xml.gz\$"); 

等,但他們不工作。

我錯過了什麼。

我已經看過谷歌和SO,並且在C#中發現了與這些符號有關的問題,但是我找到的解決方案都沒有解決我的問題。

??

下面是一個完整的程序:

static void Main(string[] args) 
{ 
    string sReconciliationFileFolder = ConfigurationManager.AppSettings["ReconciliationFileLocation"]; 
    DirectoryInfo sReconciliationFileDirectory = new DirectoryInfo(sReconciliationFileFolder); 

    foreach (var Reconciliationfile in sReconciliationFileDirectory.GetFiles("*.gz")) 
    { 
     var FileNameRegex = new Regex(@"^TEST_(\d{4}).xml.gz$"); 
     Match validFileName = FileNameRegex.Match(Reconciliationfile.FullName); 

     if (validFileName.Success) 
     { 
      Console.WriteLine(Reconciliationfile.FullName); 

     } 
    } 

    Console.WriteLine("FINISHED"); 
    Console.ReadLine(); 

} 

請注意,如果刪除^和$,控制檯應使用Reconciliationfile.Name文件夾

+4

請給一個簡短而完整的程序演示問題。你向我們展示了*創建一個'Regex'選項的代碼,但不是你在調用它的代碼。 –

+0

瘋狂猜測是文件名中的大小寫混合 - 但在給出一些示例文件名之前無法確定。 – rbm

+0

@JonSkeet我已經發布完整的代碼 – Alex

回答

5

中寫入文件名。目前,您使用的文件爲Reconciliationfile.FullName,該文件爲您提供完整路徑

此外,在正則表達式,你必須逃脫.,它應該是@"^TEST_\d{4}\.xml\.gz$"