2012-12-14 79 views
3
var result=list.select(element=>element.split['_']).list(); 
/* I want to extract the part of the file name from a list of file names */ 

我有文件名稱的數組,並且我想從陣列的每個文件名LINQ和字符串數組

例如提取名稱的一部分:

0-policy001_Printedlabel.pdf
1- policy002_Printedlabel.pdf
2- policy003_Printedlabel.pdf
3- policy004_Printedlabel.pdf

現在我想使用LINQ提取數組超出上述陣列,這給我的只有

爲policy001,policy002,policy003,policy004

你能幫幫我嗎?我是lambda表達式的新手。

+2

@DanielMann我認爲第一部分是他已經嘗試過的,但顯然由於格式不夠清楚。 – LukeHennerley

+2

是「0」,「1」等等,是文件名的一部分還是隻是一個索引? –

+0

@HansKesting這是什麼讓我困惑,當我把我的答案 – LukeHennerley

回答

1

如果數字指標

string[] output = fileList.Select(fileName => fileName.Split(new char[] {'_'})[0]).ToArray(); 

如果數字是文件名

string[] output = fileList.Select(fileName => fileName.Split(new char[] {'-', '_'})[1]).ToArray(); 
+0

這也將在開始時返回數字 –

+0

爲什麼downvotes?我誤解了一些東西嗎? – LukeHennerley

+0

@JustinHarvey我看到這個問題的格式讓我覺得數字代表了索引... – LukeHennerley

4
Regex regex = new Regex(@".+(policy[0-9]+).+"); 

var newarray = yourarray.Select(d=>regex.Match(d)) 
         .Where (mc => mc.Success) 
         .Select(mc => mc.Groups[1].Value) 
         .ToArray(); 
4
List<string> output = fileList.Select(fileName => fileName.Split(new char[] {'-','_'})[1]).ToList() 
+0

+1爲答案,在我理解了被問到的哈哈後會改變我的答案。 – LukeHennerley

0

的一部分,如果它總是那麼嚴格:

string[] result = list 
    .Select(fn => Path.GetFileNameWithoutExtension(fn) 
         .Split(new[] { '-', '_' }, StringSplitOptions.None) 
         .ElementAtOrDefault(1)) 
    .ToArray();