2012-11-28 76 views
2

我在Python中給出了一個字符串my_str。我想要做的是:如果my_str包含子字符串str1,則在子字符串str1後面插入一個字符串str2(並保留my_str的其餘部分不變)。否則,不執行任何操作。 (比方說,my_str包含不超過一個子是str1。)如果找到插入子字符串

我想的方法是:做一個for循環中尋找是否str1my_str

for i in range(0, len(my_str)-len(str1)): 
    if my_str[i:i+len(str1)] == str1: 
    my_str = my_str[0:i] + str2 + my_str[i:] 

存在我很好奇是否有任何神奇的方式可以做到這一點。

+7

不要將其命名變量'str'或'file'或'dict'或'set'或'list'等 – inspectorG4dget

+0

@ inspectorG4dget謝謝,編輯:) –

回答

8

最簡單的方法是用str.replace()

>>> str1 = "blah" 
>>> str2 = "new" 
>>> "testblah".replace(str1, str1+str2) 
'testblahnew' 
>>> "testblahtest".replace(str1, str1+str2) 
'testblahnewtest' 
>>> "test".replace(str1, str1+str2) 
'test' 
>>> "blahtestblah".replace(str1, str1+str2) 
'blahnewtestblahnew' 

我們簡單地附加到自己,在新的價值本質上開槽新的字符串替換原來的值。

A quick tutorial on replace()查看更多示例。

1
def myReplace(myStr, str1, str2): 
    try: 
     i = myStr.index(str1) 
     answer = myStr[:i+len(str1)] + str2 + myStr[i+len(str1):] 
     return answer 
    except ValueError: 
     return myStr 

希望這有助於

+0

誠實問題 - 這樣做的好處是什麼,而不是使用內置的替換方法? – Anov

+1

@Anov:內置替換是我通常會使用的。由於OP似乎是一個初學者,我給出了一個更接近他試圖實現的答案。在我的答案中,我會用'替換'的方式來完成這項工作,但是當我寫完這個解決方案時,我注意到其他人已經發布了這個解決方案。 – inspectorG4dget

+1

@ inspectorG4dget在認爲你使用了try-except來處理'ValueError',如果是這種情況,那麼使用'str.find()',如果沒有找到子字符串,則返回-1。 –

相關問題