我正在尝试在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");
}
我根本没有得到任何比赛,所有的帮助都表示赞赏!
答案 0 :(得分:2)
你可能想把?放在&lt;&gt;之前?你所有分组中的标签,并在[a-z]之后加上一个+号,如下所示:
string fileRegex = "(?<trackNo>\\d{1,3})\\.(?<artist>[a-z]+)\\s-\\s(?<title>[a-z]+)\\.mp3";
然后它应该工作。需要这样的α,以使成角度的括号内容为&lt;&gt;。被解释为分组名称,并且+'需要匹配最后一个元素的一个或多个重复,这是此处(和包括)a-z之间的任何字符。
答案 1 :(得分:1)
您的艺术家和标题组只匹配一个字符。尝试:
"(?<trackNo>\\d{1,3})\\.(?<artist>[a-z]+\\s-\\s(?<title>[a-z]+)\\.mp3"
我真的建议http://www.ultrapico.com/Expresso.htm来构建正则表达式。它很棒而且自由。
P.S。我想像我这样输入我的正则表达式字符串文字:
@"(?<trackNo>\d{1,3})\.(?<artist>[a-z]+\s-\s(?<title>[a-z]+)\.mp3"
答案 2 :(得分:0)
也许试试:
"(?<trackNo>\\d{1,3})\\.(<artist>[a-z]*)\\s-\\s(<title>[a-z]*)\\.mp3";
答案 3 :(得分:0)
<强> CODE 强>
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"]);
}
<强>输出强>
01 Pink Floyd Another Brick in the Wall