C#(.NET)模板字符串占位符正则表达式替换(EL表达式)

C#(.NET)模板字符串占位符正则表达式替换(类EL表达式)

因为需要自己写一个日志记录工具,文件名可以在配置文件中配置,能够支持模板替换自定义文件名,所以在此将模板字符串占位符替换的源代码贴出,以备后忘。

这个模板字符串占位符替换还有一些不足,性能上的优化,以及将SafeMap拓展支持JSON字符串创建,以减轻使用难度。

#region << 版 本 注 释 >>
/*----------------------------------------------------------------
* 项目名称 :WS.Text
* 项目描述 :文本格式化
* 类 名 称 :Format
* 类 描 述 :字符串格式化
* 所在的域 :
* 命名空间 :WS.Text
* 机器名称 :
* CLR 版本 :4.0.30319.42000
* 作    者 :wagsn
* 创建时间 :2018/11/22 1:27:26
* 更新时间 :2018/11/28 9:26:00
* 版 本 号 :v1.0.0.1
//----------------------------------------------------------------*/
#endregion
using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;

namespace WS.Text
{
    /// 
    /// 字符串格式化
    /// 
    public static class Format
    {
        /// 
        /// 测试模板替换,vs2017->鼠标方法名->右键交互执行->需要把那些依赖的方法和using都交互执行过才行
        /// 
        public static void Test()
        {
            SafeMap<object> map = new SafeMap<object>();
            map["username"] = "wagsn";
            map["password"] = "123456";

            Console.WriteLine(ReplacePlaceholder("${username}: ${password}", map));
            // 输出结果为:wagsn: 123456
        }

        /// 
        /// 占位符替换: ${TagName} -> TagValue
        /// 例:"${year}-${month}-${day}" -> "2018-11-28"
        /// 
        /// 模板字符串
        /// 替换后的字符串
        public static string ReplacePlaceholder<TValue>(string template, SafeMap<TValue> pairs)
        {
            string result = new string(template.ToCharArray());

            // TODO 需要优化为,匹配到 \$\{(\S*?)\} 后按照匹配到的内容作为Key在Map中寻找Value替换
            foreach(var key in pairs.Keys)
            {
                Regex regex = new Regex(@"\$\{"+key+@"\}");
                result =regex.Replace(result, pairs[key].ToString());
            }
            return result;
        }

    /// 
    /// 安全的映射表,不存在的Key返回默认的Value,string类型将返回string.Empty("")
    /// 
    public class SafeMap<TValue>
    {
        /// 
        /// 获取Keys
        /// 
        public IEnumerable<string> Keys 
        { 
            get
            {
                return kvs.Keys;
            }
        }

        private Dictionary<string, TValue> kvs = new Dictionary<string, TValue>();
        
        /// 
        /// 索引器
        /// 
        /// 索引
        /// 
        public TValue this[string index]
        {
            get
            {
                return Get(index);
            }
            set
            {
                Set(index, value);
            }
        }

        /// 
        /// 获取Key对应的值
        /// 
        /// 索引
        /// 
        public TValue Get(string index)
        {
            if (kvs.ContainsKey(index))
            {
                return kvs[index];
            }
            else
            {
                return default(TValue);
            }
        }
        /// 
        /// 设置Key对应的值
        /// 
        /// 索引
        /// 
        public void Set(string index, TValue value)
        {
            kvs[index] = value;
        }
    }
}

你可能感兴趣的:(EL表达式,模板字符串,占位符替换,文本处理,EL表达式,模板字符串,占位符替换,文本处理)