首页 > 解决方案 > 仅替换模式中的第二次出现

问题描述

假设我有一个字符串:

'hello$ world$ $'

如何仅删除第二次出现的$

或者如果我有str'ing'h

如何使用re.sub()仅删除第二个撇号?无需编写将其分解为每个字符的大长函数即可找到所有撇号等的索引。

标签: pythonregex

解决方案


你可以使用这个正则表达式:

>>> import re
>>> s = 'hello$ world$ $'
>>> print ( re.sub(r'^([^$]*\$[^$]*)\$', r'\1:', s) )
hello$ world: $

正则表达式详细信息:

  • ^: 开始
  • (: 开始捕获组 #1
    • [^$]*: 匹配 0 个或多个不匹配的字符$
    • \$: 匹配一个$
    • [^$]*: 匹配 0 个或多个不匹配的字符$
  • ): 结束捕获组 #1
  • \$: 匹配一个$

将此用于第二个问题是替换第二个单引号:

s = re.sub(r"^([^']*'[^']*)'", r'\1:', s)

推荐阅读