2

特定の構文で名前が付けられたMP3ファイルがいくつかあります。次に例を示します。

1-セバスチャン・イングロッソ-コーリング(Feat。Ryan Tedder)

ID3タグからトラック、アーティスト、タイトルを読み取る小さなプログラムをC#で作成しました。私がやりたいのは、ファイルが実際に上記の構文で名前が付けられていることを検証できる正規表現を作成することです。

だから私は歌と呼ばれるクラスを持っています:

 //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 \ Artist \ s-\s。*

どのテキストもテストに合格するため、これは明らかに機能しません。私は最善を尽くしましたが、プログラミングを始めてから2週間しか経っていません。


tl; dr注目のアーティストが含まれているかどうかに関係なく、曲が正規表現テストに合格するようにします。次に例を示します。

1-セバスチャン・イングロッソ-コーリング(Feat。Ryan Tedder)

1-フローライダー-ホイッスル

両方ともテストに合格する必要があります。

4

1 に答える 1

1

問題は、正規表現の「(」と「)」が正規表現エンジンにとって意味があることです。次のコードを使用する必要があります。

string RegexBuilder = @"\d\s-\s" + Regex.Escape(Artist) + @"\s-\s" + Regex.Escape(Title);

Escape関数は、「(Feat。)」を「\(Feat。\)」に変更します。これにより、かっこが一致し、「Feat。」がグループ化されないようになります。

http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regex.escape.aspx

于 2012-06-19T16:19:56.557 に答える