[英]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.