带花括号的String.Format

lys*_*cid 6 c# string string-formatting curly-braces

我们的低级日志记录库必须处理发送给它的各种日志消息.

其中一些消息包括花括号(作为文本的一部分),有些包含使用String.Format格式化为字符串一部分的参数

例如,此字符串可以是Logger类的输入:

"参数:{Hostname}值:{0}"使用发送的正确变量用于格式化程序.

为了正确地做到这一点,我必须逃避不属于格式化的花括号(通过将它们加倍).

我想过用Regex做这件事,但是这并不像看起来那么简单,因为我不知道如何在花括号内部匹配这些字符串(String.Format未用于格式化目的).

另一个问题是Logger类应尽可能提高性能,开始处理正则表达式,因为其操作的一部分可能会妨碍性能.

有没有适当的和已知的最佳做法?

And*_*rpi 4

仅用一个正则表达式即可完成此操作:

string input = "Parameter: {Hostname} Value: {0}";
input = Regex.Replace(input, @"{([^[0-9]+)}", @"{{$1}}");
Console.WriteLine(input);
Run Code Online (Sandbox Code Playgroud)

输出:

参数:{{主机名}} 值:{0}

当然,只有在不存在任何包含数字但仍应使用转义的参数的情况下,这才有效{{ }}