2014-06-26 41 views
2

我正在使用此代碼將單詞分隔成列表。 while循環用於刪除所有出現的空白,它們將只是一個「'的元素。問題是,即使在我運行while循環後,仍然存在僅有''的元素。我相信他們是由於空白和縮進。 while循環確實消除了大約2/3的這些空間。有沒有辦法讓單詞分開?我不想要任何空白元素,因爲當我在後面運行循環時,當我引用mylist[i][0]時,我得到的字符串索引超出範圍。使用re.split()將字符串分隔爲列表

str = fpin.read() 
mylist = re.split('[ \n]', str) 
i = 0 

while(i < len(mylist)): 
if mylist[i] == '': 
    del mylist[i] 
i = i + 1 
+1

由於沒有人直接提到它:空的字符串來自兩個空格彼此相鄰,並且兩者之間沒有任何內容。下面的答案會告訴你如何處理。 – leewz

+0

通常,在Python中,通常建議您製作一份正好符合您需要的列表的副本,而不是循環使用現有列表並從中刪除。簡單地使用'.split()'會吃掉多個空白字符,所以你不需要這個,但是這裏有一個例子說明如何用你想要的來創建一個拷貝:'newlist = [x for m in mylist if X]' – steveha

回答

6

除非我誤解了你的規格,否則你不需要這裏的正則表達式。你可以使用字符串的split方法。

>>> mystr = 'This  is \n my awesome \nstring' 
>>> mystr.split() 
['This', 'is', 'my', 'awesome', 'string'] 
0

這是我做的一個空格分隔字符串分割成列表:

re.split(r'\s*', re.sub(r'^\s+|\s*$', '', input_string)) 

與您的代碼的另一個問題是,你不應該使用str作爲變量名,因爲str是一個內置函數。

相關問題