我正在开发一个管理下载电视节目文件名的应用程序。基本上它会搜索目录并清理文件名,删除诸如句号之类的内容并用空格替换它们,并在易于识别的模式之后删除文件名末尾的描述,例如,S01E13。 (.1080p.BluRay.x264-流浪者)
我想要做的是在C#中使用正则表达式来提取SnnEnn之前的任何内容,包括它自身(其中n是任何整个正整数)。 但是,我不知道有多少正则表达式让我走了
例如,如果我的文件名为TV.Show.S01E01.1080p.BluRay.x264-ROVERS,那么查询只会获得TV.Show.S01E01,而不管该模式之前有多少个单词,所以它可能是TV.Show.On.ABC.S01E01,它仍然有用。
感谢您的帮助:)
答案 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 "";
}