C# 替换字符串特殊标记内容

Dictionary<string, string> fieldMappings,Key:特殊标记  Value:替换的内容
{"
FieldId15646","字段名"}
例:'字段:{FieldId15646}被替换'-》'字段:【字段名】被替换'

方案一:正则表达式

复制代码
        public static string ReplaceFieldIds(string input, Dictionary<string, string> fieldMappings)
        {
            // 使用正则表达式匹配所有{FieldId}格式的占位符
            return Regex.Replace(input, @"\{([^{}]+)\}", match =>
            {
                string fieldId = match.Groups[1].Value; // 提取FieldId
                if (fieldMappings.TryGetValue(fieldId, out string fieldName))
                {
                    return "" + fieldName + ""; // 找到映射,替换为字段名称
                }
                else
                {
                    // 未找到映射,可选择保留原占位符或抛出异常
                    return "" + fieldId + ""; // 示例中保留原样
                }
            });
        }
复制代码

 

方案二:循环

复制代码
        public static string GetFromContentText(Dictionary<string, string> fieldMappings, string input)
        {
            int startIndex = 0;
            string content = string.Empty;
            while (true)
            {
                int openBraceIndex = input.IndexOf('{', startIndex);
                if (openBraceIndex == -1)
                {
                    if (startIndex >= input.Length)//字符串'}'结尾
                    {
                        break;
                    }
                    else
                    {
                        content += input.Substring(startIndex);
                        break;
                    }
                }
                else
                {
                    content += input.Substring(startIndex, openBraceIndex - startIndex);
                }
                int closeBraceIndex = input.IndexOf('}', openBraceIndex);                
                var fieldId = input.Substring(openBraceIndex + 1, closeBraceIndex - openBraceIndex - 1);
                if (fieldMappings.TryGetValue(fieldId, out string fieldName))
                {
                    content += "" + fieldName + ""; // 找到映射,替换为字段名称
                }
                else
                {
                    // 未找到映射,可选择保留原占位符或抛出异常
                    content += fieldId; // 示例中保留原样
                }
                startIndex = closeBraceIndex + 1;
            }
            return content;
        }
复制代码

 

posted @   燕钰达  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
点击右上角即可分享
微信分享提示