gpt4 book ai didi

python - Python 中使用正则表达式进行有序替换

转载 作者:太空宇宙 更新时间:2023-11-03 18:33:25 25 4
gpt4 key购买 nike

我需要将一组模式匹配的字符串替换为另一组。例如,给定一个列表 [10, 20, 30, 40, 50] 和一个字符串“a b c d e”,我需要将五个字母替换为列表中的每个元素,并保持顺序:“10 20 30 40 50”。实际情况要复杂得多,所以我需要使用正则表达式来查找模式。

我可以按如下方式实现代码,但问题是当第二个“a”应替换为“30”时,重复的字母“a”被替换为相同的值 10。

l = [10, 20, 30, 40, 50]
inp = "a 1 b 2 a 3 d 4 e"

pattern = re.compile("([^\d]+)+(\s+)?")
items = pattern.findall(inp)
print items
for i, item in enumerate(items):

value = str(l[i])
inp = re.sub(item[0].strip(), value, inp)
print inp

# 10 1 20 2 10 3 40 4 50 <-- Wrong result. The 10 is replaced with first and third match.
# It should have been 10 1 20 2 30 3 40 4 50

如何解决这个问题?

最佳答案

尝试使用回调函数 re.sub 从列表中获取下一个替换:

l = [10, 20, 30, 40, 50]
inp = "a b a d e"

import re

repl = iter(l)
result = re.sub(r'\w+', lambda m: str(next(repl)), inp)

关于python - Python 中使用正则表达式进行有序替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22028656/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com