如何在 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 替换字符串中的变量?的主要内容,如果未能解决你的问题,请参考以下文章

python 正则表达式 re.sub & re.subn

Python:用 re.sub 替换列表中的多个特定单词

Python排序和删除列表中的重复项使用re.sub

大熊猫中的`re.sub()`

用re.sub向数字串中添加+1。

用re.sub向数字串中添加+1。