如何删除除任何字符串中的第一个子字符串之外的所有子字符串

时间:2018-02-10 10:55:47

标签: python

给定一个字符串text和一个正确的子字符串query。如何删除除第一个以外的查询的所有出现?

示例:

text = 'cccsumoxxxsumoppqqsumovvvvsumo' 
query = 'sumo' 

result: 'cccsumoxxxppqqvvvv'

4 个答案:

答案 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