2017-07-28 67 views
0

我有能力搜索和返回給定文件位置中的文件。我也有從文件名返回一個數列這樣的能力:C#檢查特定長度的數字字符串

public List<AvailableFile> GetAvailableFiles(string rootFolder) 
    { 

     List<AvailableFile> files = new List<AvailableFile>(); 
     if (Directory.Exists(rootFolder)) 
     { 
      Log.Info("Checking folder: " + rootFolder + " for files"); 
      try 
      { 
       foreach (string f in Directory.GetFiles(rootFolder)) 
       { 
        files = FileUpload.CreateFileList(f); 
        var getNumbers = new String(f.Where(Char.IsDigit).ToArray()); 

        System.Diagnostics.Debug.WriteLine(getNumbers); 
       } 
      } 
      catch (System.Exception excpt) 
      { 
       Log.Fatal("GetAvailableFiles failed: " + excpt.Message); 
      } 
     } 
     return files; 
    } 

我想現在要做的是隻返回數字的序列長正好是8個字符。例如一個名爲New File1 12345678 123的文件我只關心12345678回來。

如何修改我的方法來實現這個目標?

+1

F上使用正則表達式,你需要考慮,如果文件名中有8位(12345678a12345678.txt例如) – tolanj

+0

多個序列發生了什麼事實上,在你實際需要的數字序列之前的另一個數字並不會讓事情變得更容易。此刻你應該回到112345678123之類的東西。 – MetaColon

+0

getNumbers變量是一個數字字符串?你不能只是'getNumbers.Length == 8' –

回答

2

一個正則表達式似乎是很好的這樣的:

var r = new Regex(".*(\\d{8})"); 
foreach (string f in Directory.GetFiles(rootFolder)) 
{ 
    files = FileUpload.CreateFileList(f); 
    var match = r.Match(f); 
    if(m.Success) 
    { 
     Console.WriteLine(m.Groups[1]); // be aware that index zero contains the entire matched string 
    } 
} 

正則表達式匹配的8位最先發生和將其放入GroupsCollection

+0

如果我不是錯誤的,索引零不包含整個輸入字符串,而只包含第一個匹配的部分。否則,你必須添加'。*'。 – MetaColon

+0

@MetaColon不完全。它顯然返回完整的*匹配字符串* – HimBromBeere

+0

現在更好。 – MetaColon

1

你可以使用正則表達式:

var match = Regex.Match(input, @"\d{8}");