проблема с заменой регулярного выражения - PullRequest
0 голосов
/ 02 июня 2011

Я пытаюсь заставить программу пройти через множество файлов .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);
                }
            }
        }   

1 Ответ

1 голос
/ 02 июня 2011

Вы должны Escape символов при построении шаблона регулярного выражения:

string pattern = "\\s" + Regex.Escape(tempNameNoExtens);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...