繁体   English   中英

创建正则表达式以匹配文件名时出现问题

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM