python中有像ruby这样的with_index方法吗?

时间:2020-08-29 16:53:53

标签: python ruby

特别是,我想用数组中的元素替换匹配的子字符串。例如,我想将"ab.cd.def.fg"更改为12.34.def.45,所有只有两个字符的单词将按顺序["12", "34", "45"]替换为数组arr = %w(12 34 45) des = "ab.cd.def.fg" des.gsub!(/\b\w\w\b/).with_index{|x,i| arr[i].nil? ? x : arr[i]}

在红宝石中,我可以这样:

des

然后我将arr替换为re.sub。但是如何在python中做到这一点? match object接受仅带有一个类型为match object的参数的函数,但是re.sub没有索引方法,sub函数均未提供该方法。

通常,是否有Bearer error="invalid_token", error_description="The audience 'empty' is invalid" value in header 方法接受参数为迭代器的函数?有没有方法可以在python中获得索引?

1 个答案:

答案 0 :(得分:0)

您可以使用import re arr = ["12", "34", "56"] des = "ab.cd.def.fg" desarr = list(des) for i, match in enumerate(re.finditer(r"\b\w\w\b", des)): desarr[match.span()[0]:match.span()[1]] = arr[i] "".join(desarr) # "12.34.def.56" 并自己替换字符串:
(仅当匹配项被具有相同大小的字符串替换时才有效!)

re.sub

可能有人可以找到更优雅的解决方案。

使用class Replacer: def __init__(self, arr): self.arr = arr self.index = -1 def repl(self, match): self.index += 1 if self.index < len(self.arr): return self.arr[self.index] else: return match[0] r = Replacer(arr) re.sub(r"\b\w\w\b", r.repl, des) 的另一种更可靠的方法:

ConsolidatedPortfolio