示例#1
0
        /// <summary>
        /// 表达式解析
        /// </summary>
        /// <param name="template"></param>
        /// <param name="pairs"></param>
        /// <returns></returns>
        public static string Parse(string template, SafeMap <object> pairs, ELOption option = default(ELOption))
        {
            string result = new string(template.ToCharArray());

            // 忽略不匹配项
            if (option.Ignore)
            {
                // 需要优化为,匹配到 \$\{\S*?\} 后按照匹配到的内容作为Key在Map中寻找Value替换
                foreach (var key in pairs.Keys)
                {
                    Regex regex = new Regex(@"\$\{" + key + @"\}");                                                                                        // 如果Key也是正则表达式??
                    result = regex.Replace(result, pairs[key].ToString());
                    result = regex.Replace(result, new MatchEvaluator(m => pairs.ContainsKey(key) ? pairs.UnSafeGet(key).ToString() : m.Groups[1].Value)); // ?? 这里的m. m.Groups[1] 难道指的是一个匹配项,而不是所有匹配项
                }
            }
            // 将未找到匹配项的占位符删除
            else
            {
                // 需要优化为,匹配到 \$\{\S*?\} 后按照匹配到的内容作为Key在Map中寻找Value替换
                foreach (var key in pairs.Keys)
                {
                    Regex regex = new Regex(@"\$\{" + key + @"\}");
                    result = regex.Replace(result, pairs[key].ToString()); //
                }
            }
            return(result);
        }
示例#2
0
        /// <summary>
        /// 表达式解析
        /// 默认边界符:${ }
        /// </summary>
        /// <param name="input">模板字符串</param>
        /// <param name="entity">键值对</param>
        /// <returns></returns>
        public static string Parse(string input, object entity, ELOption option = default(ELOption))
        {
            // 通过反射key做字段名
            var pairs = new Dictionary <string, object>();

            foreach (System.Reflection.PropertyInfo prop in entity.GetType().GetProperties())
            {
                pairs[prop.Name] = prop.GetValue(entity);
            }
            return(Parse(input, pairs, @"\$\{", @"\}", option));
        }
示例#3
0
        /// <summary>
        /// 表达式解析
        /// 输入边界符:left rigth
        /// {Input:"${Who} ${Do} ${What}",KVs:{"Who":"Zhangsan","Do":"to eat","What":"an Apple"}}=>"Zhangsan to eat an Apple"
        /// http://www.runoob.com/csharp/csharp-regular-expressions.html
        /// </summary>
        /// <param name="input">模板字符串</param>
        /// <param name="pairs">键值对</param>
        /// <param name="leftReg">占位符左标识正则</param>
        /// <param name="rightReg">占位符右标识正则</param>
        /// <returns></returns>
        public static string Parse(string input, Dictionary <string, object> pairs, string leftReg, string rightReg, ELOption option = default(ELOption))
        {
            // left right 作为匹配字符串要正则表达式转义
            // @"(\$\{)(\w+)(\})"
            Regex regex = new Regex($"({leftReg}){@"(\w+)"}({rightReg})");

            // 忽略不匹配项 key不存在保留${key}
            if (option.Ignore)
            {
                return(regex.Replace(input, new MatchEvaluator(m => pairs.ContainsKey(m.Groups[2].ToString()) ? pairs[m.Groups[2].ToString()].ToString() : m.Value)));
            }
            // 将未找到匹配项值的占位符被删除
            else
            {
                // 这里的m. m.Groups[2]指的是第二个分组(1-9)
                return(regex.Replace(input, new MatchEvaluator(m => pairs.ContainsKey(m.Groups[2].ToString()) ? pairs[m.Groups[2].ToString()].ToString() : "")));
            }
        }
示例#4
0
 /// <summary>
 /// 表达式解析
 /// 默认边界符:${ }
 /// </summary>
 /// <param name="input">模板字符串</param>
 /// <param name="pairs">键值对</param>
 /// <returns></returns>
 public static string Parse(string input, Dictionary <string, object> pairs, ELOption option = default(ELOption))
 {
     return(Parse(input, pairs, @"\$\{", @"\}", option));
 }