如何在Python中输入转义序列?

时间:2019-01-28 21:52:27

标签: python

假设您编写以下程序

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

并尝试输入换行符\n

Input: a\nb
a\nb

输入未被视为\n字符,而是被视为两个单独的字符\\n。如何获得带有转义序列的输入,将其视为转义序列?以上示例的结果应为

Input: a\nb
a
b

3 个答案:

答案 0 :(得分:3)

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",然后将其视为字符串文字来进行评估的。这使\转义约定重新生效。

但这是非常的回旋处。您确定要让程序用户输入控制字符吗?

答案 1 :(得分:2)

您可以将\\n替换为\n,以获得所需的结果:

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

input不会读取\作为转义字符。


如果您只想打印输入内容,可以使用类似这样的东西,它将处理其他转义字符。在我看来,这不是理想的解决方案,并且会遭受'的破坏。

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

答案 2 :(得分:1)

您好,您无法输入\n,因为这会导致输入关闭。您可以尝试以下方法:

  1. 使用replace对字符串进行后处理
input().replace("\\n", \n)
  1. 使用while进行输入,直到出现空白行为止
inputs = []
while not inputs or current:
    current = input()
    inputs.append(current)
"\n".join(inputs)