繁体   English   中英

如何在Python中打印出字符串“\\ b”

[英]How can I print out the string “\b” in Python

在我的编译器类中,我决定用Python编写我的编译器,因为我喜欢用Python编程,尽管我遇到了一个关于如何打印字符的有趣问题。 我正在编写的词法分析器要求包含formfeed和backspace字符的字符串以非常特殊的方式打印到stdout:用双引号括起来,分别打印为\\ f和\\ b。 我得到的最接近的:

print("{0!r}".format("\b\f"))

产量

'\x08\x0c'

注意单引号和utf8编码。 与我关注的另外两个角色相同的命令几乎可以工作:

print("{0!r}".format("\n\t"))

得到:

'\n\t'

要清楚,我需要符合规范的结果(包括引号)是

"\b\f"

像查找\\ b和\\ f以及用“\\ b”和“\\ f”替换它们这样的简单方法似乎不起作用......“\\”只是Python打印反斜杠的方式,所以我似乎永远不会正如人们所期望的那样得到“\\ b \\ f”。

玩各种字符串编码似乎没有帮助。 我已经得出结论,我需要编写一个自定义字符串.Formatter,但我想知道是否还有其他方法我错过了。

编辑:谢谢你的所有答案。 我不认为我做了那么好的工作。 根本问题是我将字符串格式化为原始字符串,因为我希望文字换行符显示为“\\ n”,文字选项卡显示为“\\ t”。 但是,当我使用原始格式打印字符串时,我无法打印出“\\ b”和“\\ f”,如下面的所有答案所示。

我今晚会证实这一点,但基于这些答案,我认为我应该使用的方法是正常格式化输出,并捕获所有文字“\\ n”,“\\ t”,“\\ b”和“ \\ f“具有转义序列的字符,将根据需要打印它们。 我仍然希望避免使用string.Formatter。

EDIT2:我将要使用的最后一种方法是使用非原始字符串格式。 非抽象版本看起来像:

print('"{0!s}"'.format(a.replace("\b", "\\b").replace("\t", "\\t").replace("\f", "\\f").replace("\n","\\n")))

使用原始字符串:

>>> print(r'\b')
    \b
print("{0!r}".format("\b\f".replace("\b", "\\b").replace("\f", "\\f")))

或者,更干净:

def escape_bs_and_ff(s):
    return s.replace("\b", "\\b").replace("\f", "\\f")

print("{0!r}".format(escape_bs_and_ff("\b\f"))
>>> print(r'"\b\f"')
"\b\f"

r表示原始字符串或逐字符串字符串,这意味着它不是尝试将类似\\n解析为换行符,而是字面上使字符串为\\n

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM