我有一些用特定语法命名的MP3文件,例如:
1- Sebastian Ingrosso -呼叫(壮举。(莱恩·泰德尔)
我用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;
}所以大多数情况下,它是有效的。一旦我有了(壮举))在标题中它失败了。我能想到的最接近的是:
\d\s-\s\s.\s*
这显然是行不通的,因为任何文本都会通过测试,我已经尽了最大的努力,但我只编程了两个星期。
tl;博士希望宋能通过一个regex测试,测试它是否包含一个有特色的艺术家,例如:
1- Sebastian Ingrosso -呼叫(壮举。(莱恩·泰德尔)
和
1- Flo哨子
都应该通过测试。
发布于 2012-06-19 16:19:56
问题是,正则表达式中的"(“和")”对regex引擎有意义。您应该使用以下代码:
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
https://stackoverflow.com/questions/11104910
复制相似问题