2012-03-21 22 views
4

我有一個必須複製到新目錄的文件列表。所有的信息都在文件名中。每個原始文件名由一個[安裝編號] [新文件名]組成。因此,例如:拆分一個字符串,包含前導數字及其後的所有內容

235623bob.txt

這裏安裝數量爲235623和新的文件名會被bob.txt。安裝號碼是1到11位數字,新文件名永遠不會以數字開頭。但它可以從任何其他合法字符開始,並且可以在第一個字符後包含數字。因此,例如:

3245_6786bil54.txt

是3245的安裝數量和_6786bil54.txt爲新的文件名。我曾嘗試執行以下操作:

private void BtnGo_Click(object sender, EventArgs e) 
    { 
     string inst_no = ""; // installation number 
     string dest_filename = ""; // destination filename 
     string dest_directory = ""; 

     string[] source_files = Directory.GetFiles(TxtSource.Text); 

     // copy them to their new destination 
     foreach (string file in source_files) 
     { 
      // source filename contains the instno and dest_filename. 
      Match match = Regex.Match(file, @"(\d+)(\w+)"); 
      inst_no = match.Groups[0].Value; 
      dest_filename = match.Groups[1].Value; 
      dest_directory = TxtDestination.Text + "\\" + inst_no; 

      if (!Directory.Exists(dest_directory)) 
       Directory.CreateDirectory(dest_directory); 

      File.Copy(file, dest_directory + "\\" + dest_filename); 
     } 
    } 

這裏的問題是:

inst_no = match.Groups[0].Value; 
dest_filename = match.Groups[1].Value; 

1253hans.txt應該成爲

inst_no=1253 
dest_filename=hans 

但它是

inst_no=1253hans 
filename=1253 

有什麼我誤解了小組賽嗎?

回答

6

Groups[0]始終是完全匹配的字符串。 Groups[1]將成爲您的第一個子組。
您的代碼應該如下所示:

inst_no = match.Groups[1].Value; 
dest_filename = match.Groups[2].Value; 
+0

謝謝。就是這樣。它確實按照預期的文件名工作。 – 2012-03-21 10:01:15

相關問題