0

我有一些以特定语法命名的 MP3 文件,例如:

1 - Sebastian Ingrosso - Calling (Feat. Ryan Tedder)

我用 C# 编写了一个小程序,它从 ID3 标签中读取曲目、艺术家和标题。我想做的是编写一个正则表达式,它可以验证文件实际上是用上面列出的语法命名的。

所以我有一个名为歌曲的课程:

class Song
{
    //Fields
    private string _filename;
    private string _title;
    private string _artist;


    //Properties
    public string Filename
    {
        get { return _filename;  }
        set { _filename = value; }
    }

    public string Title
    {
        get { return _title;  }
        set { _title = value; }
    }

    public string Artist
    {
        get { return _artist;  }
        set { _artist = value; }
    }


    //Methods

    public bool Parse(string strfile)
    {
        bool CheckFile;

        Tags.ID3.ID3v1 Song = new Tags.ID3.ID3v1(strfile, true);
        Filename = Song.FileName;
        Title = Song.Title;
        Artist = Song.Artist;


        //Check File Name Formatting
        string RegexBuilder = @"\d\s-\s" + Artist + @"\s-\s" + Title;
        if (Regex.IsMatch(Filename, RegexBuilder))
        {
            CheckFile = true;
        }
        else
        {
            CheckFile = false;
        }
        return CheckFile;
     }

所以它在大多数情况下都有效。我在标题中有 (Feat. ) 的那一刻失败了。我能想到的最接近的是:

\d\s-\s\艺术家\s-\s.*

这显然行不通,因为任何文本都会通过测试。提前致谢。

4

1 回答 1

1

\d\s-\s\Sebastian Ingrosso\s-\sCalling(\s\(Feat.*)?

这适用于两者:

1 - Sebastian Ingrosso - Calling (Feat. Ryan Tedder)
1 - Sebastian Ingrosso - Calling

所以:

string RegexBuilder = @"\d\s-\s" + Artist + @"\s-\s" + Title + "(\s\(Feat.*)?";

应该做的工作

可以在这里试用:http : //gskinner.com/RegExr/

于 2012-06-17T18:41:49.413 回答