簡體   English   中英

在 Python 中,當該項目多次出現時替換字符串中的特定項目

[英]Replacing a specific item in a string when that item occurs more than once, in Python

假設我有以下內容:

str1='restart'

我想使用 function replace() 將 'r' 替換為 '#' 但只有第二次出現 'r' 而不是第一次

預期回報為:

str1='resta#t'

我知道如何替換所有出現的 'r' str1.replace('r','#') ,或者從第一個str1.replace('r','#',1)開始的多次出現的 'r' str1.replace('r','#',1) ,但無法弄清楚如何僅替換第二次出現而不是其他出現。

如果這不能解決問題,那么我需要更多細節。

str1.replace(str1[5],'#')

或者

r2 = str1.find(r, 2)
str1.replace(r2, '#')

以下代碼可以解決問題。

string = "restart"
result = string.replace("r", "#").replace("#", "r", 1)
print(result) # resta#t

您可以使用拆分和替換。

str1 = "restart"
split_ch = "r"
new_ch = "#"
split_list = str1.split(split_ch, 1)
result = split_list[0]+ split_ch + split_list[1].replace(split_ch,new_ch, 1)

我們可以在這里使用正則表達式替換:

str1 = "restart"
output = re.sub(r'r([^r]*)r', r'r\1#', str1, 1)
print(output)  # resta#t

該模式匹配第一個r ,捕獲可選的非r后面的字母,然后是第二個r 然后,我們將#替換為第二個r 請注意, re.sub的第四個參數是1 ,這意味着這種替換只會發生一次。

一種可能為您完成它的方法!

def replace_second(input_:str, letter:str = 'r', replace:str ='other'):
    idx = [i for i, _ in enumerate(input_) if _ ==letter]
    return input_[:idx[1]] + input_[idx[1]:].replace(letter, replace)

自己嘗試一下:

replace_second('restart', 'r', '#')
str1='restart'
str1 = [*str1]
i = 0
j = 0
for string in str1:
    j += 1
    print(string, j)
    if string == 'r':
        i+=1
        if i ==2:
            str1[j-1] = '#'
        else:
            continue
print(''.join(str1))

絕對不是最好的,但這有效......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM