[英]Problem creating regex to match filename
我正在尝试在C#中创建一个正则表达式,以从文件名中提取艺术家,曲目号和歌曲标题,例如:01.artist-title.mp3
现在,我无法正常工作,并且在网上找不到很多相关帮助时遇到了问题。
这是我到目前为止的内容:
string fileRegex = "(?<trackNo>\\d{1,3})\\.(<artist>[a-z])\\s-\\s(<title>[a-z])\\.mp3";
Regex r = new Regex(fileRegex);
Match m = r.Match(song.Name); // song.Name is the filname
if (m.Success)
{
Console.WriteLine("Artist is {0}", m.Groups["artist"]);
}
else
{
Console.WriteLine("no match");
}
我根本没有任何比赛,感谢所有帮助!
您可能希望在所有分组中的<>标记之前放置?,并在[az]的后面放置+号,如下所示:
string fileRegex = "(?<trackNo>\\d{1,3})\\.(?<artist>[a-z]+)\\s-\\s(?<title>[a-z]+)\\.mp3";
然后它应该工作。 必须使用?,以便将尖括号<>的内容解释为分组名称,并且必须将+匹配最后一个元素的1个或多个重复,最后一个元素是(且包括)之间的任何字符在这里
您的艺术家和标题组恰好匹配一个字符。 尝试:
"(?<trackNo>\\d{1,3})\\.(?<artist>[a-z]+\\s-\\s(?<title>[a-z]+)\\.mp3"
我真的建议http://www.ultrapico.com/Expresso.htm构建正则表达式。 它是辉煌而免费的。
PS我喜欢这样输入我的正则表达式字符串文字:
@"(?<trackNo>\d{1,3})\.(?<artist>[a-z]+\s-\s(?<title>[a-z]+)\.mp3"
也许尝试:
"(?<trackNo>\\d{1,3})\\.(<artist>[a-z]*)\\s-\\s(<title>[a-z]*)\\.mp3";
码
String fileName = @"01. Pink Floyd - Another Brick in the Wall.mp3";
String regex = @"^(?<TrackNumber>[0-9]{1,3})\. ?(?<Artist>(.(?!= - ))+) - (?<Title>.+)\.mp3$";
Match match = Regex.Match(fileName, regex);
if (match.Success)
{
Console.WriteLine(match.Groups["TrackNumber"]);
Console.WriteLine(match.Groups["Artist"]);
Console.WriteLine(match.Groups["Title"]);
}
OUTPUT
01 Pink Floyd Another Brick in the Wall
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.