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

问题描述

特别是,我想用数组中的元素替换匹配的子字符串。例如,我想将"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中获得索引?

解决方法

您可以使用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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...