首页 > 解决方案 > Python RegEx:如何单独替换每个匹配项

问题描述

我有一个字符串s、一个模式p和一个替换r,我需要获取其中只有一个匹配项p被替换为的字符串列表r

例子:

s = 'AbcAbAcc'
p = 'A'
r = '_'

// Output:
['_bcAbAcc', 'Abc_bAcc', 'AbcAb_cc']

我试过了,re.finditer(p, s)但我不知道如何用r.

标签: pythonregexreplace

解决方案


找到所有匹配项后,您可以手动替换它们:

[s[:m.start()] + r + s[m.end():] for m in re.finditer(p,s)]

结果是:

['_bcAbAcc', 'Abc_bAcc', 'AbcAb_cc']

它是如何工作的?

  • re.finditer(p,s)将找到所有匹配项(每个都将是一个re.Match 对象)
  • re.Match对象具有start()返回end()匹配位置的方法
  • 您可以使用以下代码替换开始和结束之间的字符串部分:s[:begin] + replacement + s[end:]

推荐阅读