C# 中使用类似 {0}, {1:yyyy-MM-dd} 这样的格式占位符,如果被格式化字符串本身包含 { 或者 } 怎么办呢?答案是:用两个 { 或者 }连写表示单个。
例如
string
str1
=
String.Format(
"
{{Hello}}, {0}, Now is {{{1:yyyy-MM-dd HH:mm:ss}}}
"
,
"
Jinglecat
"
, DateTime.Now);
//
{Hello}, Jinglecat, Now is {2007-07-18 23:06:35}
// string str2 = String.Format("{Hello}, {0}, Now is {{1:yyyy-MM-dd HH:mm:ss}}", "Jinglecat", DateTime.Now); // --> System.FormatException: 输入字符串的格式不正确。
// string str2 = String.Format("{Hello}, {0}, Now is {{1:yyyy-MM-dd HH:mm:ss}}", "Jinglecat", DateTime.Now); // --> System.FormatException: 输入字符串的格式不正确。
事实上,很多情况下带特殊含义的字符都是这样转义的:
如,
C# 中,当字符串常量带 @ 前导的时候,用两个 " 连写表示一个 " (半角双引号)
string str3
=
@"My UserName
is
""Jinglecat"".";
//
My UserName
is
"Jinglecat".
// string str4 = @"My UserName ' s "Jinglecat""; // error CS1002: 应输入 ;
//string str5 = @"My UserName ' s /"Jinglecat/""; // error CS1002: 应输入 ;
// string str4 = @"My UserName ' s "Jinglecat""; // error CS1002: 应输入 ;
//string str5 = @"My UserName ' s /"Jinglecat/""; // error CS1002: 应输入 ;
SQL 字符串常量,用两个 ' 连写表示一个 ' (半角单引号)
DECLARE
@str6
varchar
(
100
)
SET @str6 = ' My UserName is '' Jinglecat '' . '
PRINT @str6 -- My UserName is 'Jinglecat'.
SET @str6 = ' My UserName is '' Jinglecat '' . '
PRINT @str6 -- My UserName is 'Jinglecat'.
正则表达式中用,两个 $ 连写表示一个 $ (dollar)
我在c#中用正则表达式写了个关于后缀为.dat或者.txt文件名的判断是这样的:
Regex regEx = new Regex(@"/b/w{1}:(//([^//:*?""<>|]+|([^//:*?""<>|]+/s*)+[^//:*?""<>|]+))+(/.dat|/.txt)/b");
这其中就用到了""的转义,当时光想这个就想得我头疼了,这个"符号还不知道怎么处理!