コード例 #1
0
ファイル: Format.cs プロジェクト: Wagsn/DotNET-WS
        /// <summary>
        /// 占位符替换: ${}.
        /// ${TagName} 如果TagName找不到将保留${TagName}.
        /// "${Date} ${NotFoundTagName}" -> "2018-11-28 ${NotFoundTagName}"
        /// Created by Wagsn on 2018/11/28 11:29.
        /// </summary>
        /// <param name="template">模板字符串</param>
        /// <returns></returns>
        public static string ReplacePlaceholderByIgnore <TValue>(string template, SafeMap <TValue> pairs)
        {
            string result = new string(template.ToCharArray());

            // 需要优化为,匹配到 \$\{\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] 难道指的是一个值,而不是所有匹配项
            }
            return(result);
        }
コード例 #2
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);
        }