从字符串中提取Python字典

Gor*_*ran 2 python regex django dictionary django-views

我有一个带有有效python字典的字符串

data = "Some string created {'Foo': u'1002803', 'Bar': 'value'} string continue etc."
Run Code Online (Sandbox Code Playgroud)

我需要提取该字典。我尝试使用正则表达式,但由于某些原因re.search(r"\{(.*?)\}", data)无法正常工作。有什么更好的方法可以提取此词典?

dan*_*dee 5

来自@AChampion的建议。

>>> import re
>>> import ast
>>> x = ast.literal_eval(re.search('({.+})', data).group(0))
>>> x
{'Bar': 'value', 'Foo': '1002803'}
Run Code Online (Sandbox Code Playgroud)

所以您要寻找的模式是 re.search('({.+})', data)

您应该使用字符串提取花括号,因此ast.literal_eval可以将字符串转换为python字典。您也不需要r前缀as {}捕获组中的前缀,它们()会在字面上进行匹配。


ren*_*zob 5

解析字典的更好方法,无需使用eval

import re
import json

data = "Some string created {'Foo': '1002803', 'Bar': 'value'} string continue"


dict_object = json.loads(re.search('({.+})', data).group(0).replace("'", '"'))
Run Code Online (Sandbox Code Playgroud)

** 如果要解析的字典包含 unicode 字符串值(参考问题的示例字符串):

dict_object = json.loads(re.search('({.+})', data).group(0).replace("u'", '"').replace("'", '"'))
Run Code Online (Sandbox Code Playgroud)