簡體   English   中英

你如何在 Python 中輸入轉義序列?

[英]How do you input escape sequences in Python?

假設你做了以下程序

a=input("Input: ")
print(a)

並嘗試輸入換行符\\n

Input: a\nb
a\nb

輸入未被視為\\n字符,而是被視為兩個單獨的字符\\\\n 如何將帶有轉義序列的輸入視為轉義序列? 上面樣本的結果應該是

Input: a\nb
a
b

input語句接受用戶按字面意義輸入的輸入。 \\轉義約定是Python字符串文字中發生的事情:它不是適用於存儲在變量中的數據的通用約定。 如果是這樣,則永遠不能在字符串變量中存儲兩個字符\\后跟n因為它們會被解釋為ASCII 13。

您可以通過這種方式做您想做的事情:

import ast
import shlex
a=input("Input: ")
print(ast.literal_eval(shlex.quote(a)))

如果響應Input:提示您輸入one\\ntwo ,則將輸出此代碼

one
two

這是通過將a one\\ntwo的內容one\\ntwo回一個看起來像"one\\ntwo"帶引號的字符串,然后將其視為字符串文字來進行評估的。 這使\\轉義約定重新起作用。

但這是非常的回旋處。 您確定要讓程序用戶輸入控制字符嗎?

您可以將\\\\n替換為\\n以得到所需的結果:

a = a.replace('\\n', '\n')

input不會將\\讀作轉義字符。


如果您只想打印輸入內容,可以使用類似這樣的東西,它將處理其他轉義字符。 在我看來,這不是理想的解決方案,而且還會遭受'破壞。

eval('print("{}")'.format(a))

您好,您無法輸入\\n因為它會導致輸入關閉。 您可以嘗試以下方法:

  1. 使用replace對字符串進行后處理
input().replace("\\n", \n)
  1. while輸入空行時使用
inputs = []
while not inputs or current:
    current = input()
    inputs.append(current)
"\n".join(inputs)

Python 本身可以做到這一點:

text = r"Hello\nworld!"
text = text.encode().decode( "unicode_escape" )
print( text )

請注意,您的 shell ( shlex ) 轉義(如果有)可能與 Python 自己的轉義協議不同,后者用於解析用戶代碼中的字符串。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM