【问题标题】:How to manipulate string with escaped quotes如何使用转义引号操作字符串
【发布时间】:2017-06-07 20:02:26
【问题描述】:

由于转义字符,以下代码尝试将字符串解析为字典时遇到问题,我将发布一个示例:

string = """ {"key" : "value 'others' = \"one \" "} """
json.loads(string)

json 无法加载,因为它得到了带有太多双引号的以下字符串:

 {"key" : "value 'others' = "one " "}

其实我不需要加载 json ,我可以简单地做一个 eval :

ast.literal_eval(string)

到目前为止一切顺利,问题是我无法使用替换删除转义的双引号字符串(例如: s.replace('\"','') ),因此,有一些低级字符串操作要实现我想要什么?我想要一个有效的 json 语法:

{"key" : "value 'others' = one "} 

或者能够让python不删除反斜杠:

{"key" : "value 'others' = \"one\" "} 

正如弗朗索瓦所说,这可以通过原始字符串来实现:

rawstring = r"my string \""

我的问题与已经放入非原始字符串变量的字符串有关,因此我需要某种方法将该非原始字符串重新转换为原始字符串,以便使用 json 或 ast 解析为字典数据结构。文字评估

【问题讨论】:

  • 您不想额外转义引号,以便 JSON 将其视为:{"key" : "value 'others' = \"one \" "}。现在您将丢弃信息。
  • 嗨,Willem,事实上,它在来自 read 的字符串中以这种方式转义: {"key" : "value 'others' = \"one \" "} 。这里的问题是字符串用反斜杠解释双引号,因为它被定义为普通字符串
  • 原始字符串与常规字符串没有不同的类型。为了方便起见,这只是 python 代码中的不同文字符号。一旦字符串文字被解析,它就与任何其他字符串没有什么不同。这类似于 python 允许您使用双引号或单引号声明字符串文字的方式。
  • 你是如何加载字符串的?根据python,您可以在字符串s 上使用repr(s) 来查看字符串的样子。如果 json 数据中的任何字符串文字包含内部 " 字符,则如果要解析 json,则必须正确转义这些字符。
  • 这解释了原始字符串:stackoverflow.com/questions/2081640/…

标签: python string replace quotes


【解决方案1】:

引号转义在这里不起作用:

>>> """ {"key" : "value 'others' = \"one \" "} """
' {"key" : "value \'others\' = "one " "} '

如您所见,反斜杠已被忽略。您可以使用 raw 前缀将它们考虑在内:

import json
string = r""" {"key" : "value 'others' = \"one \" "} """
print(json.loads(string))

结果:

{'key': 'value \'others\' = "one " '}

【讨论】:

  • 是的,没错,但是如何将字符串转换为原始字符串?如果我将整个字符串放入一个名为 string 的 var 中: string = """ {"key" : "value 'others' = \"one \" "} """ 类似:rawString = string.toRaw()
  • 原始字符串只是与 literals 一起使用的前缀。如果字符串来自文件并且带有引号,则无需对其进行原始处理。
  • 问题是我不是从文件解析,而是从变量解析,因为我从浏览器机械化模拟网络导航中获取信息,所以,我将字符串转换为 python 变量,我有类似的东西: string = browser.response().read()
  • 所以你的问题是不同的。您应该使用您收到的字符串的打印值对其进行编辑。
  • 您不明白:按字面意思输入会删除反斜杠。您必须将字符串放在一个文件中并从中读取它才能代表非文字数据。
猜你喜欢
  • 2021-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-02
  • 2017-01-30
相关资源
最近更新 更多