我正在开发一个小型应用程序,需要用其值替换字符串中的.NET样式“变量”。下面是一个示例:

更换:

“ {D} / {MM} / {YYYY}”

带有:
“ 2009年12月31日”

我决定使用Regex查找出现的“ {var}”,但是我不太确定如何正确处理它。

最佳答案

如果您要使用正则表达式,并且有一个已知的模式,那么它不会比使用Match Evaluator方法而不是多次调用replace更为简单:

void Main() // run this in LinqPad
{
    string text = "I was here on {D}/{MMM}/{YYYY}.";
    string result = Regex.Replace(text, "{[a-zA-Z]+}", ReplaceMatched);

    Console.WriteLine(result);
}

private string ReplaceMatched(Match match)
{
    if( match.Success )
    {
        switch( match.Value )
        {
            case "{D}":
                return DateTime.Now.Day.ToString();
            case "{YYYY}":
                return DateTime.Now.Year.ToString();
            default:
                break;
        }
    }
    // note, early return for matched items.

    Console.WriteLine("Warning: Unrecognized token: '" + match.Value + "'");
    return match.Value;
}


给出结果

警告:无法识别的令牌:“ {MMM}”
我在2009年2月{MMM}登陆。


显然,它并没有完全实现。

检出LinqPad和正则表达式工具,例如Expresso

10-07 16:09
查看更多