Python 如何使用re.sub删除方括号内重复的文本块?

Python 如何使用re.sub删除方括号内重复的文本块?,python,regex,re,Python,Regex,Re,我从一个API得到一个响应,它是一个带有一些'key':'values'的伪字典,但大部分只是一个带有'key:values'的文本块。我使用.json()将其转换为: {'status':'done','nextLogId':'AQAAAXb','logs':[{'content':{'service':'t2pipeline','tag1:value1','tag2:value2','tag3:value3'],'timestamp':'2021-01-05T05:25:03.416Z','

我从一个API得到一个响应,它是一个带有一些
'key':'values'
的伪字典,但大部分只是一个带有
'key:values'
的文本块。我使用
.json()
将其转换为:

{'status':'done','nextLogId':'AQAAAXb','logs':[{'content':{'service':'t2pipeline','tag1:value1','tag2:value2','tag3:value3'],'timestamp':'2021-01-05T05:25:03.416Z','host':'i-00e17','attributes':{'caller':'psignal/state_machine.go:451','ts':1609824303.416246','level:'warn'},'message':'psignal:ignoreding scte35 segmentation_descriptor(类型:Program Start eventID:0 refUTC:Jan 5 05:25:02.387626333):存在具有相同事件id的活动段。},'id':'AQAAAXb'},{'content':{'service':'t2pipeline','tags':['tag1:value1','tag2:value2',tag3:value3'],“时间戳”:“2021-01-05T05:25:03.416Z”,“主机”:“i-00e17”,“属性”:“{caller':'psignal/state_machine.go:713”,“t2':{'scte35':{'event_id':0,'event_ptr':'0xc009f32b40','seg_type_id':16},'ts':1609824303.4161847,'level':'info','message':'psignal:scte35 seg-eventID:0-type:'aqaid','asb}],'requestId':'OVZRd3hv'}

这里有两个条目,实际上会有更多条目

我使用
json.dumps()

然后使用
re.sub()
从响应中删除
'tags':[]
,部分并按如下方式返回字符串

res=re.sub(r'“标记”:\[.*“\],\s',“”,响应\u字符串)
问题是它只返回最后一个条目

打印(res)
{status:“done”,“nextLogId:“AQAAAXb”,“logs:“{”content:“{”service:“t2pipeline”,“timestamp:“2021-01-05T05:25:03.416Z”,“host:“i-00e17b8e872ec7d05”,“attributes:“{”caller:“psignal/state_machine.go:713”,“t2:{”scte35:{”event_id:“0”,“event_ptr:“0xc009f32b40”,“seg_type_id:”16},“ts:”16061843,“level”信息“}”,消息“:“psignal:scte35 segdesc事件id:0类型:程序启动”},“id:“AQAAAXb”}],“requestId:“OVZRd3hv”}

如何修改正则表达式,以便删除
'tags':[]
的每个实例,并返回包含所有条目的整个字符串


注意:由于我不能按键删除内容,所以我认为删除内容的唯一方法是将响应视为字符串,并使用regex删除标记。

无需使用regex。使用

导入json
res={'status':'done','nextLogId':'AQAAAXb','logs':[{'content':{'service':'t2pipeline','tag1:value1','tag2:value2','tag3:value3'],'timestamp':'2021-01-05T05:25:03.416Z','host':'i-00e17','attributes':{'caller':'psignal/state\u machine.go:451','ts':1609824303.416246','level:'warn'},'message':'psignal:ignoreding scte35 segmentation_descriptor(类型:Program Start eventID:0 refUTC:Jan 5 05:25:02.387626333):存在具有相同事件id的活动段。},'id':'AQAAAXb'},{'content':{'service':'t2pipeline','tags':['tag1:value1','tag2:value2',tag3:value3'],“时间戳”:“2021-01-05T05:25:03.416Z”,“主机”:“i-00e17”,“属性”:“{caller':'psignal/state_machine.go:713”,“t2':{'scte35':{'event_id':0,'event_ptr':'0xc009f32b40','seg_type_id':16},'ts':1609824303.4161847,'level':'info','message':'psignal:scte35 seg-eventID:0-type:'aqaid','asb}],'requestId':'OVZRd3hv'}
对于范围内的i(len(res['logs']):
del res['logs'][i]['content']['tags']
打印(res)

结果

{'status': 'done', 'nextLogId': 'AQAAAXb', 'logs': [{'content': {'service': 't2pipeline', 'timestamp': '2021-01-05T05:25:03.416Z', 'host': 'i-00e17', 'attributes': {'caller': 'psignal/state_machine.go:451', 'ts': 1609824303.416246, 'level': 'warn'}, 'message': 'psignal: Ignoring scte35 segmentation_descriptor (type:Program Start eventID:0 refUTC:Jan  5 05:25:02.387626333): there is an active segment with the same event_id'}, 'id': 'AQAAAXb'}, {'content': {'service': 't2pipeline', 'timestamp': '2021-01-05T05:25:03.416Z', 'host': 'i-00e17', 'attributes': {'caller': 'psignal/state_machine.go:713', 't2': {'scte35': {'event_id': 0, 'event_ptr': '0xc009f32b40', 'seg_type_id': 16}}, 'ts': 1609824303.4161847, 'level': 'info'}, 'message': 'psignal: scte35 segdesc eventID:0 type:Program Start'}, 'id': 'AQAAAXb'}], 'requestId': 'OVZRd3hv'}

为什么不解析Json并删除您想要删除的内容呢?不,您并不是真的想通过解析Json文本来做到这一点。Regex不适合嵌套[[],例如,您不应该使用Regex处理Json,而应该使用object。
del res['logs'][0]['content']['tags']
将起作用,只需在循环中使用它。或者尝试调整此递归json响应资源管理器使用范围内的i(len(res['logs')):