创建正则表达式以匹配文件名的问题

时间:2009-09-01 15:41:56

标签: c# regex

我正在尝试在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");
}

我根本没有得到任何比赛,所有的帮助都表示赞赏!

4 个答案:

答案 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