2011-06-02 39 views
0

我正試圖讓程序通過很多.sql文件並將示例view_name的名稱替換爲[dbo]。[view_name]。到目前爲止,它取代了大部分單詞,但是如果一個名稱包含像(3)或(7)等括號中的數字,它就不會替換該文件中的任何內容。我已經提供了下面的代碼。正則表達式替換問題

 FolderBrowserDialog fb = new FolderBrowserDialog(); 
     fb.ShowDialog(); 

     string directory = fb.SelectedPath; 

     if(directory != String.Empty) 
     { 
      DirectoryInfo di = new DirectoryInfo(directory); 
      FileInfo fi = new FileInfo(directory); 
      FileInfo[] fiArray = di.GetFiles(); 

      for (int i = 0; i < fiArray.Length; i++) 
      { 
       string result; 
       //StreamReader 
       using (StreamReader sr = new StreamReader(directory + "\\" + fiArray[i].ToString())) 
       { 
        string temp = sr.ReadToEnd(); 

        string tempNameExtens = fiArray[i].Name; 
        string tempNameNoExtens = Path.GetFileNameWithoutExtension(fiArray[i].Name); 
        MessageBox.Show(tempNameNoExtens); 


        string pattern = "\\s" + tempNameNoExtens; 
        string replace = " [dbo].[" + tempNameNoExtens + "]"; 

        Regex rgx = new Regex(pattern); 
        result = rgx.Replace(temp, replace); 
       } 

       //StreamWriter 
       using (StreamWriter sw = new StreamWriter(directory + "\\" + fiArray[i].ToString())) 
       { 
        sw.WriteLine(result); 
       } 
      } 
     } 
+0

你的意思是,'tempNameNoExtens'包含像'ABC(5)'? – Howard 2011-06-02 12:31:53

+0

是啊,以及它獲取文件名如此模板 - 複製(2)和模板 - 複製(5)類似的東西.. – 2011-06-02 12:36:14

+0

你不需要像這樣的直線字符串的正則表達式。 'result = temp.Replace(「」+ tempNameNoExtens,「[dbo]。[」+ tempNameNoExtens +「]」);'應該就好了。 – Town 2011-06-02 12:39:01

回答

1

建設正則表達式時,應Escape人物:

string pattern = "\\s" + Regex.Escape(tempNameNoExtens);