在String.Format()中如何转义单引号

31

我已经在不同的论坛上搜索,但我无法理解这个问题。也许很简单。

下面是一个String.Format调用示例:

return dt.ToString("MMM d yy 'at' H:mmm");

正确返回:

09月23日08点12:57

现在假设我想在年份之前添加单引号,以返回以下内容:

09月23日'08点12:57

由于单引号是保留的转义字符,如何转义单引号以便它正常显示?

我已经尝试过双引号、三引号和四引号,都没有成功。

3个回答

39

你可以使用反斜杠转义它,但你需要对反斜杠进行转义。两种方法都是:

return dt.ToString(@"MMM d \'yy 'at' H:mmm");
或者
return dt.ToString("MMM d \\'yy 'at' H:mmm");

3
为了辩护我自己,我被你在String.Format()中为了转义大括号所采取的方法所吸引,暂时失去了理智...谢谢! - Jeff Atwood
在这种情况下,%字符是不必要的,因为%d和%H与其他格式模式结合使用。没有它们会使它更清晰一些。 - David Glenn
@Martin 我不知道这是否相关或者我是否应该开一个新的问题,但是我该如何让它工作?<asp:Label ID="Label1" runat="server" Text='<%# Eval("MyDate", "{0:MMM d yy 'at' H:mmm}")%>'>目前我得到了一个错误,我猜测是因为'at'的单引号。 - thx0125
没事了,我在这里找到了解决方案https://dev59.com/oUXRa4cB1Zd3GeqPt7Eb。 - thx0125

5
如果是用于HTML,您可以直接使用HTML实体。-- 编辑
&#39;

--编辑

仅为了使这篇文章不出错,正如其他人指出的那样,转义是有效的:)

string s = t.ToString("MMM d \\'yy 'at' H:mmm");

那就是我最后一次不基于发布者测试某些东西的了 :)


2

除非我真的不得不使用C# @字符串,否则我不喜欢它们,所以我会选择这个。

return dt.ToString("MMM d \\'yy 'at' H:mmm");

这只是个人偏好,取决于您认为哪种更易于“阅读”。


2
尝试编写一个单元测试,测试一个检测转义字符并处理它们的类。你会很快爱上@字符串。 - Jeff Tucker
写了5分钟的正则表达式后,我也开始喜欢@字符串了。 :-) - Christian Hayter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接