#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);