C#字符串实现宏替换

宏:

MacroTotal123
MacroY2Y456
MacroM2M789

模板:

“本季度总额{MacroTotal},同比增长{MacroY2Y}%,环比增长{MacroM2M}%”

宏替换实现:

    
private readonly string LeftSign = "{";
private readonly string RightSign = "}";

public void PreviewConclusion(string content)
{
    var list = GetInnerString(LeftSign, RightSign, ref content);
    
    //MacroList就是已计算出相关值的宏列表,这里生成Dictionary便于取值
    var dict = MacroList.ToDictionary(k => { return k.Macro; }, v => { return v.Value + string.Empty; });

    var values = new object[list.Count];
    for (var i = 0; i < values.Length; i++)
    {
	    if (dict.ContainsKey(list[i]))
	    {
		    values[i] = dict[list[i]];
	    }
	    else
	    {
            //没有这个宏,则保留原样
		    values[i] = $"{LeftSign}{list[i]}{RightSign}";
	    }
    }

    string conclusion = string.Format(content, values);
}

public List<string> GetInnerString(string prefix, string postfix, ref string source)
{
	Match match = new Regex("(?<=(" + prefix + "))[0-9A-Za-z_]*?(?=(" + postfix + "))", RegexOptions.IgnoreCase | RegexOptions.Multiline | RegexOptions.Singleline).Match(source);
	int num = 0;
	List<string> list = new List<string>();
	while (match.Success)
	{
		list.Add(Regex.Replace(match.Value, "\\s*|\t|\r|\n", ""));
		source = source.Replace("{" + match.Value + "}", $"{{{num++}}}");
		match = match.NextMatch();
	}

	return list;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值