如何在 re.sub 上迭代列表并使用 python 替换字符串中的变量?
Posted
技术标签:
【中文标题】如何在 re.sub 上迭代列表并使用 python 替换字符串中的变量?【英文标题】:How to iterate a list over re.sub and replace variables in a string using python? 【发布时间】:2011-10-28 14:33:17 【问题描述】:我有一个字符串说:
s = 'deviceId=servicename.DeviceID&deviceGroupID=servicename.GroupID&abcd=dkef'
我可以通过为括号中的项目解析几个 XML 来获取数据。获取数据后,我使用 dictset 的组合器为括号 中的项目(大致)产生这些结果:
['ApplC3LDJXGEDCP7', '10']
['ApplC3LDJXGEDCP7', '11']
['ApplC3LDJXGEDCP7', '12']
['ApplC3LDJXGEDCP7', '13']
['androidc1596699510', '14']
Dictset 组合返回项目列表 [deviceId, groupID]。考虑到我是 Python 的新手,我如何遍历这个列表并查找/替换字符串中的项目?请帮忙!
让我还添加到目前为止我尝试过的内容 - 我可以使用 For 遍历列表,并能够使用 re.sub 替换列表中的 1 个项目。但是,代码需要同时替换这两个项目。我使用的正则表达式是 r".+?"
【问题讨论】:
让我也添加到目前为止我尝试过的内容 - 我可以使用 For 遍历列表,并能够使用 re.sub 替换列表中的 1 个项目。但是,代码需要同时替换这两个项目。我使用的正则表达式是 r"\.+?\" 几分钟后提出了几乎相同的问题:***.com/questions/7087905/… 嗨 Eugene,响应使用字典键进行迭代。不幸的是,鉴于结果是一个列表,我无法为结果添加键。让我试试,但不确定它是否会产生结果。 【参考方案1】:使用单个 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
,它可以容忍参数重新排序、缺少参数等。
【讨论】:
以上是关于如何在 re.sub 上迭代列表并使用 python 替换字符串中的变量?的主要内容,如果未能解决你的问题,请参考以下文章