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