2013-01-13 57 views
0

所以我有一些這樣的句子:的Python:句子分裂產生一個空白

The window is over there. The lamp is on. The fire is burning. 

當採用分體式(「」),然後用換行符加入它,我把它分解,就失去了「」

然後我試圖像正則表達式,但(?<=\.)\s它的第二和第三字母的第一個字母之前產生空間:

The window is over there. 
The lamp is on. 
The fire is burning. 

我不想額外的空間。我想:

The window is over there. 
The lamp is on. 
The fire is burning. 

感謝

+0

您的正則表達式解決方案適用於我 – Eric

回答

3
".\n".join(i.strip() for i in a.split(".")) 
+0

你的最後一句話沒有'。' – Eric

+0

是的你是對的。那麼,假設每句話都是。終止,我們可以隨時添加一個「。」在表達的結尾:)。否則,我的解決方案不包括這種情況.. – hymloth

3
>>> test = "The window is over there. The lamp is on. The fire is burning." 
>>> print test.replace(". ",".\n") 
The window is over there. 
The lamp is on. 
The fire is burning. 
+1

呃,打我吧:P –

+0

我看到了。英雄所見略同? – 2013-01-13 20:51:10

+0

當然,我會用這個來運行;) –

1

顯然不是(一期之後即無空格)特殊情況處理,爲什麼不只是做:

>>> s = 'The window is over there. The lamp is on. The fire is burning.' 
>>> print s.replace('. ', '.\n') 
The window is over there. 
The lamp is on. 
The fire is burning. 
1

有處理分割輸入的幾種方法:分割後剝離,使用正則表達式分割或使用簡單搜索。

第一個選項可能是最直觀的:將字符串拆分成點,就像您已經做的那樣,然後剝離結果字符串以刪除任何空格並恢復尾部點。在Python中:

sentences = input.split('.') 
sentences = [s.strip() + '.' for s in sentences if s] 
print sentences.join('\n') 

第二種簡單的方法是簡單替換'。 「與」 \ n'的。

print input.replace('. ', '.\n') 

這將與您的輸入工作,但如果有人使用兩個空格分開的句子(其中一些人更喜歡)將失敗。

最後也是最靈活的方法是使用正則表達式來分割上的點和空白的組合:

import re 
sentences = re.split('(?<=\.)\s*', input) 
print sentences.join('\n') 

通知你的正則表達式的重要區別:我用\ S *消耗所有可能的空白。這對於有兩個或更多個空間的情況很重要,或者根本沒有。