亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

替換除 Python 中第一次出現的子字符串之外的所有內容?

替換除 Python 中第一次出現的子字符串之外的所有內容?

慕斯709654 2022-06-22 18:00:38
我有一個如下所示的字符串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
查看完整描述

4 回答

?
尚方寶劍之說

TA貢獻1788條經驗 獲得超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 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


查看完整回答
反對 回復 2022-06-22
?
HUX布斯

TA貢獻1876條經驗 獲得超6個贊

您可以使用方法partition和replace。工作代碼如下所示:


string = "SELECT sdfdsf SELECT sdrrr SELECT 5445ff"

parts = string.partition("SELECT")  # returns a tuple

results = 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


查看完整回答
反對 回復 2022-06-22
?
青春有我

TA貢獻1784條經驗 獲得超8個贊

您可以itertools.count使用re.sub:


import re, itertools

c = 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'


查看完整回答
反對 回復 2022-06-22
?
慕蓋茨4494581

TA貢獻1850條經驗 獲得超11個贊

另一種方法:


import re

from itertools import chain, repeat

string = '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


查看完整回答
反對 回復 2022-06-22
  • 4 回答
  • 0 關注
  • 239 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號