如何正确处理文件输入中的转义序列

问题描述

我正在构建一个程序,该程序可以读取用户的一些输入。如果此输入包含转义字符,例如'\ n',那么我需要像换行符一样处理它,而不是像文字字符串class lua_script {...};那样。这必须适用于一切可能的转义序列,而不仅仅是\ r,\ n等常见的转义序列。我尝试使用r'\n'shlex来实现这一点行为,但我收到一个错误

我的代码

ast

错误

import shlex
import ast
text = r"result:"
escaped_text = ast.literal_eval(shlex.quote(text))
print(escaped_text)

解决方法

shlex.quote可能不是此处工作的工具,因为它有时会产生外引号,有时却不会:

>>> print(shlex.quote("a"))
a
>>> print(shlex.quote("a\n"))
'a
'

literal_eval将需要使用外部引号,以允许将字符串表达式同样地对待。 (您的错误是输入字符串没有得到shlex.quote添加的外部引号。)

基本上,您需要类似的东西:

escaped_text = ast.literal_eval(f"'{text}'")

但是如果text本身包含'符号,则会出现问题。只是为了处理这种情况,不幸的是,您需要执行以下操作:

text2 = text.replace("'","'"'"'"'"'"'"'")

以便将单个'替换为'"'"',这里更长的"'"'"'"'"'"'"'"是表示所示(5个字符)字符串所需的源代码。

您可以执行以下操作:

escaped_text = ast.literal_eval(f"'{text2}'")