正则表达式匹配到标准模式的结尾

时间:2015-09-27 08:06:40

标签: c# regex search

我正在开发一个管理下载电视节目文件名的应用程序。基本上它会搜索目录并清理文件名,删除诸如句号之类的内容并用空格替换它们,并在易于识别的模式之后删除文件名末尾的描述,例如,S01E13。 (.1080p.BluRay.x264-流浪者)

我想要做的是在C#中使用正则表达式来提取SnnEnn之前的任何内容,包括它自身(其中n是任何整个正整数)。 但是,我不知道有多少正则表达式让我走了

例如,如果我的文件名为TV.Show.S01E01.1080p.BluRay.x264-ROVERS,那么查询只会获得TV.Show.S01E01,而不管该模式之前有多少个单词,所以它可能是TV.Show.On.ABC.S01E01,它仍然有用。

感谢您的帮助:)

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分: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 "";
}