如何在re.sub上迭代列表并使用python替换字符串中的变量?

时间:2011-08-17 04:11:48

标签: python regex list loops

我有一个字符串说:

s = 'deviceId={servicename.DeviceID}&deviceGroupID={servicename.GroupID}&abcd=dkef'

我可以通过解析括号中的项目的几个XML来获取数据。在获得数据后,我使用dictset的组合器(大致)为parantheses {}中的项目产生这些结果:

['ApplC3LDJXGEDCP7', '10']
['ApplC3LDJXGEDCP7', '11']
['ApplC3LDJXGEDCP7', '12']
['ApplC3LDJXGEDCP7', '13']
['androidc1596699510', '14']

Dictset组合返回项目列表[deviceId,groupID]。考虑到我是Python的新手,如何迭代此列表并查找/替换字符串中的项?请帮忙!

让我也添加到目前为止我尝试过的内容 - 我可以使用For迭代列表并使用re.sub替换列表中的1项。但是,代码需要同时替换两个项目。我使用的正则表达式是     r“{。+?}”

1 个答案:

答案 0 :(得分:3)

使用单个sub调用并传递一个返回所需内容的函数。

s = 'deviceId={servicename.DeviceID}&deviceGroupID={servicename.GroupID}&abcd=dkef'
r = ['ApplC3LDJXGEDCP7', '10']
print(re.sub(r'{.+?}', lambda match: r.pop(0), s, count=len(r)))
# deviceId=ApplC3LDJXGEDCP7&deviceGroupID=10&abcd=dkef

更好的方法可能是使用urllib.parse.parse_qs,这将容忍参数重新排序,缺少参数等。