2011-12-27 86 views

回答

1

必須是比德的一個速度更快,但價格可讀性:

>>> idx = s.find('hello') + len('hello') 
>>> s[:idx] + s[idx:].replace('hello', '') 
'hello this is stackoverflow ' 
+0

我最初在for循環中使用了類似的東西。 – incognito2 2011-12-27 17:37:40

1
parts = old.split("hello") 
parts[1:1] = "hello" 
new = "".join(parts) 

好像應該有一個更好的辦法...

+0

FYI,與這一個可能間隔的問題。 – 2011-12-27 17:08:19

+0

問題是所有「你好」的可能不是大寫字母。如果任何一個hello的大小寫不同,它將無法正常工作。 – incognito2 2011-12-27 17:41:04

+1

@ incognito2。不公平!大寫問題徹底改變了你原來的問題。 – ekhumoro 2011-12-27 17:45:03

0

非常糟糕的方式:

s = "hello this is hello stackoverflow hello" 
s = s.replace("hello", "world").replace("world", "hello", 1) 

這將替換所有hello通過world,那麼只有第world通過hello更換

+0

很好,直到你的輸入字符串已經包含「hello」之前的「world」。 – kindall 2011-12-27 17:10:10

0
s = "hello this is hello stackoverflow hello" 
t = "hello" 

i = s.index(t) + len(t) + 1 
s = s[:i] + s[i:].replace(t, "") 

print s # hello this is stackoverflow 
1
>>> s = 'hello this is hello stackoverflow hello' 
>>> head, sep, tail = s.partition('hello') 
>>> head + sep + tail.replace('hello', '') 
'hello this is stackoverflow ' 
0

首先,每個人都會認爲這是一個匹配模式的難題,所以問題是爲什麼hello重複?

如果第一hello假定然後字符串的一個簡單的過濾可以解決該問題

s = 'hello this is hello stackoverflow hello' 
l = s.split(' ') 
"hello %s" % " ".join(filter (lambda a: a != 'hello', l)) 
'hello this is stackoverflow' 

或者:

import re 
s = 'hello this is hello stackoverflow hello' 
re.sub('\shello\s?', ' ', s).strip() 
'hello this is stackoverflow' 
+0

只有當第一個'hello'恰好在字符串的開頭時纔有效。 – ekhumoro 2011-12-27 17:31:51

+0

正是我爲什麼說我說的話,我們把這個問題看作是一個模式問題,所以我們試圖解決這個問題,但爲什麼在這種情況下重複你好? – 2011-12-27 17:33:11

+0

它們是由任何人輸入的隨機句子 – incognito2 2011-12-27 17:36:21

相關問題