如何确保我的 Python 正则表达式输出字典?

Posted

技术标签:

【中文标题】如何确保我的 Python 正则表达式输出字典?【英文标题】:How can I ensure that my Python regular expression outputs a dictionary? 【发布时间】:2011-04-27 05:59:35 【问题描述】:

我正在使用 Beej 的 Python Flickr API 向 Flickr 请求 JSON。 Flickr 返回的未解析字符串如下所示:

jsonFlickrApi('photos': 'example')

我想以字典的形式访问返回的数据,所以我有:

photos = "jsonFlickrApi('photos': 'test')"

# to match 'photos': 'example'
response_parser = re.compile(r'jsonFlickrApi\((.*?)\)$')
parsed_photos = response_parser.findall(photos)

但是,parsed_photos 是一个列表,而不是字典(根据 type(parsed_photos)。它的输出如下:

["'photos': 'test'"]

如何确保我的解析数据最终成为字典类型?

【问题讨论】:

【参考方案1】:

如果您使用的是 Python 2.6,则可以只使用 JSON 模块来解析 JSON 内容。

import json
json.loads(dictString)

如果您使用的是早期版本的 Python,您可以下载 simplejson 模块并使用它。

例子:

>>> json.loads('"hello" : 4')
u'hello': 4

【讨论】:

【参考方案2】:

您需要使用 JSON 解析器将字符串表示形式转换为实际的 Python 数据结构。查看标准库中json 模块的文档以获取一些示例。

换句话说,您必须在代码末尾添加以下行

photos = json.loads(parsed_photos[0])

附言。理论上,您也可以使用eval 来实现相同的效果,因为 JSON(几乎)与 Python 文字兼容,但这样做会打开一个巨大的安全漏洞。只是为了让您知道。

【讨论】:

不太正确 - 您不能使用 eval,因为 JSON 与 Python 文字不兼容。示例:Python 使用None; JSON 使用null。 Python使用True/False; JSON 使用true/false @Smashery:这不是语法上的区别,您只需为 null/true/false 定义本地变量,一切都会好起来的。不是我推荐的,只是使用库。 我已经使用了您的第一个建议来获取字典 - 非常感谢!你能解释一下 parsed_photos[0] 中的 [0] 代表什么吗? @bfox: findAll 返回给定正则表达式的所有匹配项的数组,[0] 只取第一个元素。

以上是关于如何确保我的 Python 正则表达式输出字典?的主要内容,如果未能解决你的问题,请参考以下文章

从 python 中成功的正则表达式匹配构建字典

求java正则表达式输出小于10的正整数

Python 用正则表达式解析数据变成字典。

Python Pandas 和正则表达式使用字典替换 Dataframe 中的项目

PySpark UDF 优化挑战使用带有正则表达式的字典(Scala?)

正则表达式 - 将连字符后的文本提取到 Python 中的字典中