如何使用RegEx将文件名的前缀ID#转换为List数组?

时间:2015-06-16 19:56:58

标签: c# regex

如何使用RegEx将文件名的前缀ID#转换为List数组?或者如果您知道更好的方法,可以采用其他方法。

我只想要111,222和333值(ID#)。

var myList = new List<string>();

myList.Add("foo/0000-0000-0001/111_Age_3_20150518T0800-0400.txt");
myList.Add("foo/0000-0000-0002/222_Bal_3_20120518T0800-0400.txt");
myList.Add("foo/0000-0000-0003/333_DDS_3_20140518T0800-0400.txt");

var filteredFiles2.Select(x => Regex.Match(x, @"^[^\d]+").Value).Distinct();

2 个答案:

答案 0 :(得分:1)

您可以使用Path类获取文件名,然后将其拆分:

var filteredFiles = myList.Select(x => System.IO.Path.GetFileNameWithoutExtension(x).Split('_').First()).ToList();

答案 1 :(得分:0)

您是否需要Regex功能(即课程要求)?

如果没有,你可以强制它,如下所示:

    private List<String> myList;

    private void Init()
    {
        myList = new List<string>();

        myList.Add("foo/0000-0000-0001/111_Age_3_20150518T0800-0400.txt");
        myList.Add("foo/0000-0000-0002/222_Bal_3_20120518T0800-0400.txt");
        myList.Add("foo/0000-0000-0003/333_DDS_3_20140518T0800-0400.txt");
    }

    private string[] filtered()
    {
        var list = new List<String>();
        foreach (var line in myList)
        {
            var split1 = line.Split('/');
            if (split1.Length == 3)
            {
                var split2 = split1[2].Split('_');
                if (split2.Length == 4)
                {
                    list.Add(split2[0]);
                }
            }
        }
        return list.ToArray();
    }