簡體   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