C# 用正则表达式高效替换变量

有的时候我们需要进行简单的字符串变量替换. 当然最新的.net已经支持 {name} 这种替换方式. 但是,老的.net是不支持的. 本方法是把 “{{varName}}” 这种变量替换成 对应的数值.
例如
Week1 = 星期一
Week2 = 星期二
Week3 = 星期三
Week4 = 星期四

“今天是{{Week1}}, 明天是{{Week2}}”
替换结果
“今天是星期一, 明天是星期二”

下面是代码

        /// 
        /// 会自动替换 变量   把形如 "{{varName}}" 替换成对应的数值
        /// 
        public static void ReplaceFileVar(string srcFile, string targetFile)
        { 
            /*
            * 设置webconfig连接字符串
            */
            string webconfigpath = Path.Combine("./", srcFile);
            //修改第一个数据库连接
            string webcofnigstring2 = File.ReadAllText(webconfigpath);

            webcofnigstring2 = ReplaceStringVar(webcofnigstring2);

            //循环替换所有的 {{DBSERVER}} 这种变量 效率比较低,改成上面的replace
            //foreach (Match item in mat)
            //{
            //    Console.WriteLine(item.Groups[1]);
            //    var name = item.Groups[1].Value;
            //    if (! string.IsNullOrEmpty( InstallContext.Get(name)))
            //    {
            //         webcofnigstring2.Replace(@"{{"+ name + "}}", InstallContext.Get(name));
            //    }
            //}

            File.WriteAllText(targetFile, webcofnigstring2);
        }


        /// 
        /// 会自动替换 变量   把形如 "{{varName}}" 替换成对应的数值
        /// 
        private static string ReplaceStringVar(string str)
        {
            Regex reg = new Regex(@"\{\{(.*?)\}\}");
            //var mat = reg.Matches(webcofnigstring2);

            str = reg.Replace(str,
                new MatchEvaluator(m =>
                     InstallContext.Get(m.Groups[1].Value) == string.Empty ? m.Value : InstallContext.Get(m.Groups[1].Value)
                ));
            return str;
        }

InstallContext.cs 顺便也贴一下

public static class InstallContext 
    {

        private static Dictionary<string, string> kvs = new Dictionary<string,string> ();


        public static string Get(string index)
        {
            if (kvs.ContainsKey(index))
            {
                return kvs[index];
            } else {
                return string.Empty;
            } 
        }
        public static void Set(string index, string value)
        {
            kvs[index] = value;
        }



        //private static InstallContext instance = new InstallContext();

        //private InstallContext()
        //{

        //}

        //public static InstallContext GetInstance()
        //{ 
        //    return instance;
        //}

    }

下面是使用方法

        private void button3_Click(object sender, EventArgs e)
        { 

            InstallContext.Set("WebSiteDBConnectstring",textBox1.Text);
            ReplaceFileVar("Web.config.tpl","Web.config"); 

        }

Web.config.tpl 文件内容


<configuration>
{{WebSiteDBConnectstring}}
configuration>

你可能感兴趣的:(net)