2015-09-27 111 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 ""; 
}