2015-09-27 84 views
0

我正在處理一個應用程序來管理下載的電視節目的文件名。基本上,它將搜索目錄並清理文件名,刪除諸如完整停止之類的東西,並用空格替換它們,並在例如S01E13的易識別模式之後去除文件名末尾的描述。 (.1080p.BluRay.x264-ROVERS)正則表達式匹配到標準模式的末尾

我想要做的是在C#中使用正則表達式表達式來提取SnnEnn之前包括其自身(其中n是任何整數正整數)之前的任何內容。 但是,我不知道太多正則表達式讓我去

例如,如果我有文件名TV.Show.S01E01.1080p.BluRay.x264-ROVERS,查詢只會得到TV.Show.S01E01 ,不管模式之前有多少個單詞,所以它可以是TV.Show.On.ABC.S01E01,它仍然可以工作。

感謝所有幫助:)

+1

所以,學會如何做到這一點...嘗試它,你的時候嘗試用其中的代碼提出問題後失敗。我們會幫你 – Gilad

回答

1

試試這個

string input = "TV.Show.S01E01.1080p.BluRay.x264-ROVERS"; 
      string pattern = @"(?'pattern'^.*\d\d[A-Z]\d\d)"; 
      string results = Regex.Match(input, pattern).Groups["pattern"].Value; 
+0

試一試'(?'pattern'。* S \ d \ dE \ d \ d)' –

0

有更明顯的方式,而不正則表達式:

string GetNameByPattern(string s) 
{ 
    const string pattern_length = 6; //SnnEnn 

    for (int i = 0; i < s.Length - pattern_length; i++) 
    { 
     string part = s.SubString(i, pattern_length); 

     if (part[0] == 'S' && part[3] == 'N') //candidat 
      if (Char.IsDigit(part[1]) && Char.IsDigit(part[2]) && Char.IsDigit(part[4]) && Char.IsDigit(part[5])) 
       return s.SubString(0, i + pattern_length); 
    } 

    return ""; 
}