如果是string.Contains两个数字+" x" +那么一个数字

时间:2014-12-25 20:04:44

标签: c# regex string

我正在创建一个关于电视剧的软件。我需要从剧集的文件名(字符串)中获取“剧集编号”。

文件名示例: “剧集2x04的标题” “我是另一个头衔S05E22” “惊人的电视系列22x2”

我考虑过从剧集部分拆分标题部分,但文件名的格式每次都不一样(例如.nxmm,SnnEmm,nnxm)。

这是我的简单代码:

foreach (string filename in path) {
    if (filename.Contains(*season n episode m*)) {
       // do something
    }
}

4 个答案:

答案 0 :(得分:3)

你应该使用正则表达式:

var list = new List<string>();

list.Add("Lost 04x01");
list.Add("Lost 04x02");
list.Add("Lost 4x3");
list.Add("Lost 4x04");
list.Add("Lost S04E05");
list.Add("Lost S04E6");

Regex regex = new Regex(@"S?\d{1,2}[X|E]?\d{1,2}", RegexOptions.IgnoreCase);

foreach (string file in list) {
    if (regex.IsMatch(file))
    {
        // true
    }
}

regex101 Demo

答案 1 :(得分:1)

这是代码

string one = "04x22";
string two = "s04e22";
if ((one.Split('x')).Count == 1)
{
    string[] res = (one.Split('e'));
    // result is res[1] 
}
else
{
    string[] res = (one.Split('x'));
    // result is res[1] 
}

答案 2 :(得分:1)

使用正则表达式:

var regex = new Regex(@"(?<season>\d+)[Ex](?<episode>\d+)");
foreach (string file in path) {
    var match = regex.Match(file);
    if (match.Success) {
        Console.WriteLine(match.Groups["season"].Value);
        Console.WriteLine(match.Groups["episode"].Value);
    }
}

这个将匹配04x22,4x22,S04E22等。您应该能够根据需要定制它或多或少的限制。

答案 3 :(得分:0)

您需要使用正则表达式从文件名中查找季节和剧集编号。

(\d?\d)[xE](\d\d)这样的东西。第一组是季节编号,第二组是剧集编号。请参阅regex fiddle有关正则表达式和演示的说明。

您需要在代码中使用Regex.Match()方法,而不是Contains()