我有一个如下所示的字符串
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/