首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于验证文件名的RegEx

用于验证文件名的RegEx
EN

Stack Overflow用户
提问于 2012-06-19 16:02:40
回答 1查看 224关注 0票数 2

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

1- Sebastian Ingrosso -呼叫(壮举。(莱恩·泰德尔)

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

所以我有一门课叫歌

代码语言:javascript
复制
 //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;
 }

所以大多数情况下,它是有效的。一旦我有了(壮举))在标题中它失败了。我能想到的最接近的是:

\d\s-\s\s.\s*

这显然是行不通的,因为任何文本都会通过测试,我已经尽了最大的努力,但我只编程了两个星期。

tl;博士希望宋能通过一个regex测试,测试它是否包含一个有特色的艺术家,例如:

1- Sebastian Ingrosso -呼叫(壮举。(莱恩·泰德尔)

1- Flo哨子

都应该通过测试。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-19 16:19:56

问题是,正则表达式中的"(“和")”对regex引擎有意义。您应该使用以下代码:

代码语言:javascript
复制
string RegexBuilder = @"\d\s-\s" + Regex.Escape(Artist) + @"\s-\s" + Regex.Escape(Title);

逃逸功能将改变“(专长)”。到"(Feat. )“,这将确保您正在匹配括号,而不是分组”专长“。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11104910

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档