Python 仅替换模式中的第二个引用

Python 仅替换模式中的第二个引用,python,regex,Python,Regex,假设我有一个字符串: 'hello$ world$ $' 如何仅删除第二次出现的$ 或者如果我有str'ing'h 如何使用re.sub()仅删除第二个撇号? 无需编写一个大而长的函数将其分解为每个字符,即可找到所有撇号等的索引。您可以使用以下正则表达式: >>> import re >>> s = 'hello$ world$ $' >>> print ( re.sub(r'^([^$]*\$[^$]*)\$', r'\1:', s) )

假设我有一个字符串:

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

或者如果我有
str'ing'h

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

您可以使用以下正则表达式:

>>> 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)

您可以使用此正则表达式:

>>> 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)

如果你表现出你的努力,那么你会得到更好的答案。我已经尝试过了,一切都是什么感觉。我花了整整1.5个小时在一个测试上,试图找出一个答案,但没有找到。相信我,我知道这不是最好的问题。但是有人能回答这个问题吗?如果你表现出你的努力,那么你会得到更好的答案。我已经尝试过了,一切都是什么感觉。我花了整整1.5个小时在一个测试上,试图找出一个答案,但没有找到。相信我,我知道这不是最好的问题。但是有人能回答这个问题吗?这很好,我能问一下为什么在捕获组之外的模式部分被替换而不是捕获组吗?…捕获组之外的部分是你要替换的,所以必须在捕获组之外。这很好,我可以问一下,为什么在捕获组之外的部分被替换而不是捕获组?…捕获组之外的部分是您要替换的部分,因此必须在捕获组之外。