Python 顺序不固定时的正则表达式

Python 顺序不固定时的正则表达式,python,regex,Python,Regex,我有以下形式的数据: {"product": [{ "id": "", "name": "some text", "purchased_at": ""} , {..}, {..}]} {"product": [{ "name": "", "id": "some text

我有以下形式的数据:

{"product": [{ "id": "", "name": "some text", "purchased_at": ""} , {..}, {..}]}
{"product": [{ "name": "", "id": "some text", "purchased_at": ""} , {..}, {..}]}
{"product": [{ "purchased_at": "", "id": "some text", "name": ""} , {..}, {..}]}
...
键的顺序不固定,我创建的正则表达式无法捕获其他数据格式:

"name":\s*"(.*?)","purchased_at":\s*"(.*?)",.*?"id":\s*"(.*?)"
如何修改此项以包含订单更改?

您可以尝试此项:

(?:{"\w*"\:\s?\[\{\s?)*"(\w*)":\s?"([\w\s]*)"(?:,?\s?\}?\s?\,?\s?\{?\]?\}?)
在这里测试: 试试这个:

m = re.search('^(?=.*"name":\s*"(?P<name>.*?)")(?=.*"id":\s*"(?P<id>.*?)")(?=.*"purchased_at":\s*"(?P<purchased_at>.*?)").*', input)
dict = {"name":m.group('name'), "id":m.group('id'), "purchased_at":m.group('purchased_at')}
m=re.search(“^(?=.*”名称):\s*”(?P.*))(?=.*“id:\s*”(?P.*)))(?=.*“购买地点”:\s*”(?P.*))*”,输入)
dict={“name”:m.group('name'),“id”:m.group('id'),“purchased_at”:m.group('purchased_at')}
它使用单独的look ahead来分别捕获所有键/值,这样它们在输入中的顺序就不重要了,而是对组进行命名,这样就可以通过名称而不是通常通过位置来访问它们


>>>m=re.search('^(?=.''名称:“\s*”(?P.*))(?=.''id:“\s*”(?P.*))(?=.''购买地点:“\s*”(?P.*)”).''{产品:“[{”id:“id1”,“名称:“:”name1”,“购买地点:“:“pa1”},{..},{.}
>>>dict={“name”:m.group('name'),“id”:m.group('id'),“purchased_at”:m.group('purchased_at')}
>>>打印口述
{'pa1','name':'name1','id':'id1'}

您为什么不使用dictionary?@vincentPHILIPPE我正在尝试提取姓名、id和购买价格。我希望使用regex进行匹配,然后将组存储在dictionary中。请在问题中提及您必须使用regex。您的问题通常会通过
json
解决,并且您将看到基于json的解决方案。您想捕获所有3个键/值对吗?但是,是的,由于这是json,许多本机python函数已经可以解析此格式,如@DYZ在您问题的注释中所说。因此,正则表达式可能不是最佳选择,但如果您想使用它,请这样做:)
>>> m = re.search('^(?=.*"name":\s*"(?P<name>.*?)")(?=.*"id":\s*"(?P<id>.*?)")(?=.*"purchased_at":\s*"(?P<purchased_at>.*?)").*', '{"product": [{ "id": "id1", "name": "name1", "purchased_at": "pa1"} , {..}, {..}]}')
>>> dict={"name":m.group('name'), "id":m.group('id'), "purchased_at":m.group('purchased_at')}
>>> print  dict
{'purchased_at': 'pa1', 'name': 'name1', 'id': 'id1'}