You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#如何实现字符串中多个日期格式占位符的正确替换

问题原因

原有代码的逻辑缺陷非常明确:

  • 仅通过r.Match(input).Groups[1].Value提取了第一个占位符里的日期格式
  • 后续调用全局Replace时,把所有匹配到的{}占位符,都统一用这第一个格式生成的日期字符串替换
    所以当存在多个不同格式的占位符时,后面的占位符会被错误替换成第一个格式对应的日期值,这就是{HH}位置也输出年月内容的根本原因。
修复代码

直接使用Regex.Replace的MatchEvaluator重载,对每一个匹配到的占位符单独提取格式、单独生成替换值即可。额外做了一处优化:统一只获取一次当前时间,避免替换过程中跨时间节点(比如跨分、跨秒)导致不同占位符取到的时间值不一致:

using System;
using System.Text.RegularExpressions;

public static string ReplaceDate(string input)
{
    DateTime currentTime = DateTime.Now;
    Regex datePlaceholderRegex = new Regex(@"\{(.*?)\}");
    
    return datePlaceholderRegex.Replace(input, match => 
    {
        string dateFormatStr = match.Groups[1].Value;
        return currentTime.ToString(dateFormatStr);
    });
}
验证效果
  • 单占位符输入log_{yyyy-MM} foo.txt:输出符合预期,例如log_2024-05 foo.txt
  • 多占位符输入log_{yyyy-MM} foo {HH}.txt:每个占位符独立按自身格式格式化,输出符合预期,例如log_2024-05 foo 15.txt

内容的提问来源于stack exchange,提问作者Ham Burg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 02:15:39