给定一个字符串text
和一个正确的子字符串query
。如何删除除第一个以外的查询的所有出现?
示例:
text = 'cccsumoxxxsumoppqqsumovvvvsumo'
query = 'sumo'
result: 'cccsumoxxxppqqvvvv'
答案 0 :(得分:5)
请注意replace()
可以指定最大计数,因此您可以通过一个小技巧来利用它:
text[::-1].replace(query[::-1], '', text.count(query)-1)[::-1]
答案 1 :(得分:4)
我会使用str.partition
:
def f(text, qry):
pre, sep, suf = text.partition(qry)
return pre + sep + suf.replace(qry, '')
这会透明地处理查询字符串可能存在或不存在的情况,并对字符串进行必要的最低处理(不计算查询字符串或切片等...)
答案 2 :(得分:1)
更简单的方法:
''.join(text.rsplit(query, text.count(query) - 1))
这反向拆分text
,其中找到query
(从而删除它),除了最后一次出现(因此-1
),然后加入所有拆分。
答案 3 :(得分:0)
一种简单的方法是使用slicing
。
text = 'cccsumoxxxsumoppqqsumovvvvsumo'
query = 'sumo'
first = text.index(query) + len(query)
text = text[:first] + text[first:].replace(query, "")
print(text)
输出:
cccsumoxxxppqqvvvv