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

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

string = "SELECT sdfdsf SELECT sdrrr SELECT 5445ff"

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

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

现在 Pythonreplace()替换了所有出现的 SELECT。

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

所以字符串变成

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

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

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


慕斯709654
浏览 192回答 4
4回答

尚方宝剑之说

使用额外的“反向”替换步骤: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 redef make_replacer():    rpl = ''    def inner(m):        nonlocal rpl        res = rpl + m.group()        rpl = '@@@'        return res    return inners = "SELECT sdfdsf SELECT sdrrr SELECT 5445ff"res = re.sub(r'\bSELECT\b', make_replacer(), s)print(res)   # SELECT sdfdsf @@@SELECT sdrrr @@@SELECT 5445ff

HUX布斯

您可以使用方法partition和replace。工作代码如下所示:string = "SELECT sdfdsf SELECT sdrrr SELECT 5445ff"parts = string.partition("SELECT")  # returns a tupleresults = parts[0] + parts[1] + parts[2].replace("SELECT", "@@@SELECT")print(results)所以你会得到:选择 sdfdsf @@@SELECT sdrr @@@SELECT 5445ff如果string = "Blabla is SELECT sdfdsf SELECT sdrrr SELECT 5445ff",您将得到:Blabla 是 SELECT sdfdsf @@@SELECT sdrrr @@@SELECT 5445ff

青春有我

您可以itertools.count使用re.sub:import re, itertoolsc = itertools.count()string = "SELECT sdfdsf SELECT sdrrr SELECT 5445ff"r = re.sub(r"\bSELECT\b", lambda x:x.group() if not next(c) else f'@@@{x.group()}', string)输出:'SELECT sdfdsf @@@SELECT sdrrr @@@SELECT 5445ff'但是,如果SELECT总是放在字符串的开头,您可以使用否定的lookbehind:r = re.sub('(?<!^)SELECT', lambda x:f'@@@{x.group()}', string)输出:'SELECT sdfdsf @@@SELECT sdrrr @@@SELECT 5445ff'

慕盖茨4494581

另一种方法:import refrom itertools import chain, repeatstring = 'SELECT sdfdsf SELECT sdrrr SELECT 5445ff'string = ''.join(x + s for x, s in zip(chain(['', 'S'], repeat('@@@S')), re.split(r'\bS(?=ELECT\b)', string)))print(string)输出:SELECT sdfdsf @@@SELECT sdrrr @@@SELECT 5445ff
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python