解析字典中的列表值

时间:2015-11-29 10:13:10

标签: python regex

我正在尝试用RE解析数据。我必须解析的数据是:

  "comments":
{

[
{ "id" : "001",
  "x" : "2",
  "name" : "Chuck"
} ,
{ "id" : "009",
  "x" : "7",
  "name" : "Chuck"
} 
]

}

使用urllib我将上面的文本复制到一个字符串中,但我不想要所有的文本。我只想要这个:

[
{ "id" : "001",
  "x" : "2",
  "name" : "Chuck"
} ,
{ "id" : "009",
  "x" : "7",
  "name" : "Chuck"
}
]

我尝试过使用正则表达式,但我认为我做错了。我的正则表达式是:

y = re.findall("([.])", html)

我将其解释为查找[]之间的所有字符,并将其保存在y中。

2 个答案:

答案 0 :(得分:2)

  • 一种方法:在文本周围添加大括号并解析为JSON
  • 另一种方式:正则表达式\[[^\]]+\]
  • 第三种方式:用手提取x[x.find('['):x.find(']')]

答案 1 :(得分:0)

您需要使用反斜杠转义括号,并将.注释为?重复(但不包括结束括号)。使用re.DOTALL标记可使.包含换行符。然后,您可以将此字符串发送到ast.literal_eval()进行评估:

import re
import ast
s = '''  "comments":
{

[
{ "id" : "001",
  "x" : "2",
  "name" : "Chuck"
} ,
{ "id" : "009",
  "x" : "7",
  "name" : "Chuck"
} 
]

}'''

结果:

>>> ast.literal_eval(re.search(r'\[.*?\]', s, re.DOTALL).group(0))
[{'name': 'Chuck', 'x': '2', 'id': '001'}, {'name': 'Chuck', 'x': '7', 'id': '009'}]