【问题标题】:Regex match up to the end of a standard pattern正则表达式匹配到标准模式的结尾
【发布时间】:2015-09-27 08:06:40
【问题描述】:

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

我想要做的是制作一个正则表达式以在 C# 中使用来提取 SnnEnn 之前的任何内容,包括它自己(其中 n 是任何整数正整数)。 但是,我对正则表达式了解不多

例如,如果我有文件名 TV.Show.S01E01.1080p.BluRay.x264-ROVERS,则无论模式前有多少单词,查询都只会得到 TV.Show.S01E01,所以它可能是TV.Show.On.ABC.S01E01,它仍然可以工作。

感谢您的帮助:)

【问题讨论】:

  • 所以学习如何去做...当你尝试用代码询问问题后失败时尝试它。我们会帮助你

标签: c# regex search


【解决方案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;

【讨论】:

  • 试试这个(?'pattern'.*S\d\dE\d\d)
【解决方案2】:

没有正则表达式有更明显的方法:

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 "";
}

【讨论】:

    猜你喜欢
    • 2011-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 2018-02-06
    • 2011-07-07
    相关资源
    最近更新 更多