C#⽤正则表达式⾼效替换变量
有的时候我们需要进⾏简单的字符串变量替换. 当然最新的已经⽀持 {name} 这种替换⽅式. 但是,⽼的是不⽀持的. 本⽅法是把“{{varName}}” 这种变量替换成 对应的数值.
例如
Week1 = 星期⼀
Week2 = 星期⼆
Week3 = 星期三
Week4 = 星期四
“今天是{{Week1}}, 明天是{{Week2}}”
替换结果
“今天是星期⼀, 明天是星期⼆”
下⾯是代码
/// <summary>
/// 会⾃动替换变量把形如 "{{varName}}" 替换成对应的数值
/// </summary>
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);
}
/// <summary>
writeline输出数值变量/// 会⾃动替换变量把形如 "{{varName}}" 替换成对应的数值
/// </summary>
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("fig.tpl","fig");
}
<?xml version="1.0"?>
<configuration>
{{WebSiteDBConnectstring}}
</configuration>
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论