C# 正则表达式:从文件名中提取艺术家和标题
我有不同的文件名,其中包含曲目号、专辑、艺术家和标题。 它们的格式并不总是相同的。现在我想从字符串中提取链接艺术家和标题 我创建并发现了许多实现,但我无法使其在不同格式下可靠地工作。有时信息甚至在目录名等中 我不指望一个正则表达式就能解决所有问题。所以我发现有三种不同的类型 示例文件名 第一:文件名中的所有信息 第二:文件名和目录名中的信息 第三:文件名、目录名和父目录名中的信息 我用一个正则表达式(很好地使用了“|”)C# 正则表达式:从文件名中提取艺术家和标题,c#,regex,C#,Regex,我有不同的文件名,其中包含曲目号、专辑、艺术家和标题。 它们的格式并不总是相同的。现在我想从字符串中提取链接艺术家和标题 我创建并发现了许多实现,但我无法使其在不同格式下可靠地工作。有时信息甚至在目录名等中 我不指望一个正则表达式就能解决所有问题。所以我发现有三种不同的类型 示例文件名 第一:文件名中的所有信息 第二:文件名和目录名中的信息 第三:文件名、目录名和父目录名中的信息 我用一个正则表达式(很好地使用了“|”) 也许有更好的方法。。。请参阅(?:/?)(?:\d+[.:]?)(?*?:
也许有更好的方法。。。请参阅
(?:/?)(?:\d+[.:]?)(?*?:-?/)(?:(?*)/)(?:\d+[.:]?)(?*)
。您有办法对不同的格式进行排序,还是将它们混合在一起?如果你可以拆分它们,你只需要应用不同的模式来提取信息。我不能对它们进行排序,但这是一个很好的观点。谢谢第一个示例中的唱片集名称在哪里?它是包含目录吗?这里有一个工作示例来证明它是有效的:哇,太棒了!非常感谢。
01. Artist - Title.m4a
01: Artist - Title.aif
01 Artist - Title.mp3
Artist - Title.mp3
/Artist - Album/01. Title.aif
/Artist - Album/01: Title.m4a
/Artist - Album/01 Title.mp3
/Artist - Album/Title.mp3
/Artist/Album/01. Title.mp3
/Artist/Album/01: Title.m4a
/Artist/Album/01 Title.mp3
/Artist/Album/Title.aif
using System;
using System.Globalization;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
namespace ConsoleApplication7
{
class Program
{
static void Main(string[] args)
{
string[] inputs = {
"01. Artist - Title.m4a",
"01: Artist - Title.aif",
"01 Artist - Title.mp3",
"Artist - Title.mp3",
"/Artist - Album/01. Title.aif",
"/Artist - Album/01: Title.m4a",
"/Artist - Album/01 Title.mp3",
"/Artist - Album/Title.mp3",
"/Artist/Album/01. Title.mp3",
"/Artist/Album/01: Title.m4a",
"/Artist/Album/01 Title.mp3",
"/Artist/Album/Title.aif"
};
string pattern =
@"^\d*[\.:]{0,1}\s*(?'artist'[^/][^-]+)\s+-\s+(?'title'[^\.]+)" +
"|" +
@"^/(?'artist'[^-]+)-\s+(?'album'[^/]+)/\d*[\.:]{0,1}\s*(?'title'[^\.]+)" +
"|" +
@"^/(?'artist'[^/]+)/(?'album'[^/]+)/\d*[\.:]{0,1}\s*(?'title'[^\.]+)";
foreach (string input in inputs)
{
Match match = Regex.Match(input, pattern);
Console.WriteLine("Artist : {0}, Album : {1}, Title : {2}",
match.Groups["artist"].Value.Trim(),
match.Groups["album"].Value.Trim(),
match.Groups["title"].Value.Trim()
);
}
Console.ReadLine();
}
}
}