请注意 我无法在创建时修改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"
答案 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
转义。
如果希望以某种方式撤消已处理过的字符串的字符串转义处理,则不可能。字符串转义处理不是从输入到输出的内射映射。无法恢复未处理的表格;您首先需要避免字符串转义处理。