如何确保我的 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 Pandas 和正则表达式使用字典替换 Dataframe 中的项目