【问题标题】:problem with regular expression replacement正则表达式替换问题
【发布时间】:2011-09-07 01:14:42
【问题描述】:

我正在尝试制作一个程序来遍历大量 .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);
                }
            }
        }   

【问题讨论】:

  • 你的意思是,tempNameNoExtens 包含类似ABC(5) 的东西?
  • 是的,它得到了文件名,所以模板 - 复制 (2) 和模板 - 复制 (5) 类似的东西..
  • 您不需要正则表达式来进行这样的直接字符串替换。 result = temp.Replace(" " + tempNameNoExtens, " [dbo].[" + tempNameNoExtens + "]"); 应该没问题。
  • 我不得不用前面有 (') 的 1 个单词替换 5/6 个单词,所以我认为这种方式不适合我。

标签: c# regex winforms streamwriter


【解决方案1】:

您应该在构建正则表达式模式时Escape 字符:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-12
    相关资源
    最近更新 更多