如何解决如何正确处理文件输入中的转义序列
我正在构建一个程序,该程序可以读取用户的一些输入。如果此输入包含转义字符,例如'\ 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}'")
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。