C# 创建与文件名匹配的正则表达式时出现问题

C# 创建与文件名匹配的正则表达式时出现问题,c#,regex,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.

我正在尝试用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");
}
string fileRegex=“(?\\d{1,3})\\.([a-z])\\s-\\s([a-z])\\.mp3”;
Regex r=新的Regex(fileRegex);
匹配m=r.Match(歌曲名);//宋。名字就是名字
如果(m.成功)
{
Console.WriteLine(“艺术家是{0}”,m.Groups[“艺术家”]);
}
其他的
{
控制台。写入线(“不匹配”);
}

我没有得到任何比赛,所有的帮助是感激的

您可能希望在所有分组中的标记前加?,在[a-z]后加+号,如下所示:

string fileRegex = "(?<trackNo>\\d{1,3})\\.(?<artist>[a-z]+)\\s-\\s(?<title>[a-z]+)\\.mp3";
string fileRegex=“(?\\d{1,3})\\。(?[a-z]+)\\s-\\s(?[a-z]+)\\.mp3”;
那么它应该会起作用。需要“?”以便将尖括号中的内容解释为分组名称,并且需要“+”匹配最后一个元素的1个或多个重复,最后一个元素是(包括)a-z之间的任何字符。

可以尝试:

"(?<trackNo>\\d{1,3})\\.(<artist>[a-z]*)\\s-\\s(<title>[a-z]*)\\.mp3";
“(?\\d{1,3})\\.([a-z]*)\\s-\\s([a-z]*)\\.mp3”;

您的艺术家组和标题组正好匹配一个角色。尝试:

"(?<trackNo>\\d{1,3})\\.(?<artist>[a-z]+\\s-\\s(?<title>[a-z]+)\\.mp3"
“(?\\d{1,3})\\。(?用于构建正则表达式。它既精彩又免费

另外,我喜欢这样键入我的正则表达式字符串文字:

@"(?<trackNo>\d{1,3})\.(?<artist>[a-z]+\s-\s(?<title>[a-z]+)\.mp3"
@“(?\d{1,3})\.(?[a-z]+\s-\s(?[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"]);
}
stringfilename=@“01.pinkfloyd-墙上的另一块砖.mp3”;
字符串regex=@“^(?[0-9]{1,3})\.?(((?!=-)+)-(?+)\.mp3$”;
Match=Regex.Match(文件名,Regex);
如果(匹配成功)
{
Console.WriteLine(match.Groups[“TrackNumber”]);
Console.WriteLine(匹配组[“艺术家]);
Console.WriteLine(match.Groups[“Title”]);
}
输出

01 Pink Floyd Another Brick in the Wall 01 平克弗洛伊德 墙上的另一块砖