【发布时间】:2019-05-05 02:37:01
【问题描述】:
请注意 我不能在创建时修改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"
【问题讨论】:
-
一个不错的解决方法是
s.encode("unicode_escape"),因为看起来这实际上是stackoverflow.com/q/18707338/4013571 的复制,因为ast中没有内置方法。标记为重复,因为这将帮助经验不足的编码人员使用ast -
s.encode("unicode_escape")不会帮助您处理换行符或转义引号等问题。如果您的输入字符串跨越两行,unicode-escape会将其转换为反斜杠-n。如果您的输入已转义引号,unicode-escape将不知道是否应该转义其中的任何一个,并且不会转义任何一个。 -
那么更好的方法是
.replace()吗?在我的特定实例中,输入字符串s将始终是单个函数表达式
标签: python escaping abstract-syntax-tree