python - 仅替换模式中的第二次出现

标签 python regex

假设我有一个字符串:

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

关于python - 仅替换模式中的第二次出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60370341/

相关文章:

regex - 如何在不支持它们的语言中模拟非贪婪量词?

python - Flask应用程序在python中返回404错误

python - Python Flask 中 ssl_context 选项的区别

python - 同时在进程中使用 Celery 并在任务中使用 gevent

regex - 如何使用 sed/perl/awk 查找和替换模式字符串?

Java正则表达式搜索和替换

regex - 如何按名称提取某些正​​则表达式的最小条目?

python - 如何在Python中绘制非连续的自定义日期格式

python - Spark 蟒 : How to calculate Jaccard Similarity between each line within an RDD?

javascript - 建议使用 javaScript 验证电子邮件的好模式?