2011-09-01 42 views
3

我有一個方法蟒字符串替換被刪除的空白錯誤

def strip_searchname(self, original_name): 
    taboo = {" and ", " of ", " at ", " in ", ":", "-", ",", " the ", " "} 
    searchname = original_name 
    for word in taboo: 
     print(searchname) 
     searchname = searchname.replace(word, "") 
    searchname = re.sub('[^a-zA-Z]', "", searchname) 
    searchname= searchname.upper() 
    return searchname 

(是的,我知道它的部分是多餘的)

第一.replace似乎剝離空格的整個字符串,我不想要。爲什麼是這樣?我如何避免它?

(例如輸出爲:

Seattle University 
SeattleUniversity 
SeattleUniversity 
SeattleUniversity 
SeattleUniversity 
SeattleUniversity 
SeattleUniversity 
SeattleUniversity 
SeattleUniversity 
SEATTLEUNIVERSITY 

+1

的 「」 更換在taboo'的'年底將明確取代所有空格。你有什麼問題? –

+0

是的,但它是最後的替代品。正如您從示例輸出中看到的那樣,它將首次刪除*全部*空格,即「on」和「 – Colleen

+0

」正如您可以從示例輸出中看到的那樣「對不起。看不到。你能提供一個更明確的例子來證明''和''(而且只有那個)是壞的嗎?也許你的代碼的一個子集? –

回答

10

什麼,我不明白的是爲什麼它似乎是執行「」 取代之前「的」取代,例如,當「的」 替換列表中的空間之前。

這不是一個列表。

taboo = {" and ", " of ", " at ", " in ", ":", "-", ",", " the ", " "} 

是一組字面值。嘗試用[和]替換{和}以獲得您想要的訂單。

+0

它就是這樣。謝謝! (我仍然習慣Python語法) – Colleen

0

上的字符串替換爲第二個參數的第一個參數的所有出現的替換方法。在循環中,當字符串word等於" "時,替換方法將刪除searchname中的所有出現" "

+0

我明白這一點。我不明白的是爲什麼它看起來正在執行替換之前的替換,例如,當「替換」出現在列表中的空格之前時。 – Colleen

+0

也許循環沒有按照您期望的順序執行。嘗試在你的調試語句中打印'word'和'searchname'? – asf107

+0

發生這種情況是因爲你正在循環一組。如果必須刪除的禁忌字符串的順序對你來說很重要,那麼你不應該使用一個集合,而應該像一個列表或一個元組,即一個數據類型,在這個數據類型中考慮到了順序。 – etuardu

0

也許問題是taboo不是一個列表,它是一個集合和集合不保留的順序。

>>> taboo = ['a', 'b', ' '] 
>>> print taboo 
['a', 'b', ' '] 
>>> taboo = {'a', 'b', ' '} 
>>> print taboo 
set(['a', ' ', 'b']) 
+0

這是一個集合,而不是字典。 (編輯:修正) – habnabit