AST无法正确解析带有转义反斜杠的字符串

时间:2018-12-03 18:40:37

标签: python escaping abstract-syntax-tree

请注意 我无法在创建时修改s ,理想情况下,我正在通过ast 寻找方法

以下表达式

import ast
s = 'func(arg="\\\\my\\network\\drive")'
ast.parse(s).body[0].value.keywords[0].value.s

将返回

'\\my\network\\drive'

有没有解决此问题的方法,而无需手动修改s如下

ast.parse(s.replace('\\', '\\\\')).body[0].value.keywords[0].value.s

预期输出为:

"\\\\my\\network\\drive"

1 个答案:

答案 0 :(得分:0)

ast模块实际上是在正确解析输入。您误解了所涉及的字符串表示形式。根据您实际需要的结果,解决方案可能是使用原始字符串文字(请注意r):

s = r'func(arg="\\\\my\\network\\drive")'

就目前情况而言,您编写的字符串文字代表了Python源代码

func(arg="\\my\network\drive")

而不是源代码

func(arg="\\\\my\\network\\drive")

ast正在按照Python语法规定的方式处理\n转义。


如果希望以某种方式撤消已处理过的字符串的字符串转义处理,则不可能。字符串转义处理不是从输入到输出的内射映射。无法恢复未处理的表格;您首先需要避免字符串转义处理。

相关问题