2017-07-28 12 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

)間違っていると、インデックスゼロにはinout文字列全体が含まれず、最初の一致までの部分のみが含まれます。それ以外の場合は '。*'を追加する必要があります。 – MetaColon

+0

@MetaColon明らかに完全な一致する文字列* – HimBromBeere

+0

が返されます。 – MetaColon

1

あなたは正規表現を使用できます。

var match = Regex.Match(input, @"\d{8}"); 
関連する問題