簡體   English   中英

RegEx用於驗證文件名

[英]RegEx For Validating File Names

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

1-塞巴斯蒂安·格羅索(Sebastian Ingrosso)-通話(壯舉。瑞安·泰德(Ryan Tedder)

我用C#編寫了一個小程序,該程序從ID3標簽讀取曲目,藝術家和標題。 我想做的是編寫一個regex表達式,該表達式可以驗證文件實際上是用上面列出的語法命名的。

所以我有一堂課叫做歌曲:

 //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 *。

這顯然是行不通的,因為任何文本都可以通過測試,我已經盡力了,但是我只編程了兩個星期。


tl; dr想要讓歌曲通過正則表達式測試,無論它是否包含特色歌手,例如:

1-塞巴斯蒂安·格羅索(Sebastian Ingrosso)-通話(壯舉。瑞安·泰德(Ryan Tedder))

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM