проблема с заменой регулярного выражения

#c# #regex #winforms #streamwriter

#c# #регулярное выражение #winforms #streamwriter

Вопрос:

Я пытаюсь создать программу для просмотра большого количества файлов .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 resu<
                //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. Вы имеете в виду, что это tempNameNoExtens содержит что-то вроде ABC(5) ?

2. да, он получает имена файлов таким образом, что Template — Copy (2) и Template — Copy (5) что-то вроде этого..

3. Вам не нужны регулярные выражения для прямой замены строки, подобной этой. result = temp.Replace(" " tempNameNoExtens, " [dbo].[" tempNameNoExtens "]"); должно быть просто отлично.

4. мне пришлось заменить 5/6 слов на 1 слово с (‘) впереди, поэтому я не думаю, что этот способ сработал бы для меня.

Ответ №1:

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

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