python - 替换Python中除了第一次出现的子字符串之外的所有内容?

标签 python

我有一个如下所示的字符串

string = "SELECT sdfdsf SELECT sdrrr SELECT 5445ff"

现在我想用 @@@SELECT 替换除第一个之外的所有 SELECT 出现的地方,以便最终字符串看起来像这样

"SELECT sdfdsf @@@SELECT sdrrr @@@SELECT 5445ff"

现在 Python replace() 替换所有出现的 SELECT。

string = string.replace("SELECT", "@@@SELECT)

所以字符串就变成了

"@@@SELECT sdfdsf @@@SELECT sdrrr @@@SELECT 5445ff"

如何确保除了第一个实例之外,其他所有内容都被替换?

注意:字符串可以出现 n 次 SELECT

最佳答案

使用额外的“反向”替换步骤:

s = "SELECT sdfdsf SELECT sdrrr SELECT 5445ff"
res = s.replace("SELECT", "@@@SELECT").replace("@@@SELECT", "SELECT", 1)
print(res)

输出:

SELECT sdfdsf @@@SELECT sdrrr @@@SELECT 5445ff
<小时/>

更复杂但确保目标词边界的方法可能如下:

import re

def make_replacer():
    rpl = ''
    def inner(m):
        nonlocal rpl
        res = rpl + m.group()
        rpl = '@@@'
        return res
    return inner

s = "SELECT sdfdsf SELECT sdrrr SELECT 5445ff"
res = re.sub(r'\bSELECT\b', make_replacer(), s)
print(res)   # SELECT sdfdsf @@@SELECT sdrrr @@@SELECT 5445ff

关于python - 替换Python中除了第一次出现的子字符串之外的所有内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58353516/

相关文章:

python - Flask OAuth Github POST 请求

python - 如何只获取目录中的文件?

python - Pandas - 获取字符串中的列表 df 列名称(例如)

python - 神经网络模型不起作用

java - 您如何确定 App Engine 数据库请求的可接受响应时间?

python - 使用 scipy 查找样条曲线的平滑度

python - 如何获取已加载页面的 HTML 标题? (PyQt4)

python - Docker日志中的Python异常标记为流:stdout

Python 子进程帮助

python - 需要帮助确定为什么我的 Theano 脚本无法运行