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();
        }
     }
}