用于验证文件名的正则表达式

Posted

技术标签:

【中文标题】用于验证文件名的正则表达式【英文标题】:RegEx For Validating File Names 【发布时间】:2012-06-19 16:02:40 【问题描述】:

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

1 - Sebastian Ingrosso - 呼唤(壮举 Ryan Tedder)

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

所以我有一个类叫song:

 //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 - 弗洛里达 - 口哨

都应该通过测试。

【问题讨论】:

aaah cummmon 伙计们 :( 我才编程 2 周,帮助新手 :D,我真的退出了,这是我的第一个工作程序!!!! +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

【讨论】:

以上是关于用于验证文件名的正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

查找 HTML5 表单用于验证的正则表达式

用于密码验证的正则表达式

用于验证特定模式的正则表达式

用于目录路径格式验证的正则表达式

用于验证日期的正则表达式 [重复]

用于密码验证的正则表达式 [重复]