2013-06-20 92 views
0

我是一種新的python。我試圖從字符串中刪除第一句,使用句號作爲分隔符。在這種情況下分割正確的方法是使用嗎?林沒有得到期望的結果...Python字符串句子刪除

def get_summary(self): 
    if self.description: 
     s2 = self.description.split('.', 1)[1] 
     return s2 
    else: 
     return None 
+0

試試這個:''。 '.join(self.description.split('。')[1:])' – lolopop

+4

@pythonm:爲什麼? OP正確地做到了,只分解一次並得到第二個元素。 –

+1

我認爲它沒問題,但是你不必把它引用到一個新的變量名,只需返回值:'return self.description.split('。',1)[1]' –

回答

1

現在你只能得到第二森泰斯,沒有句號符號,來解決這個問題,你可以使用join-方法用於字符串。這會將列表中的所有元素合併爲一個字符串,並用字符串分隔。

def get_summary(self): 
    if self.description: 
     s2 = ".".join(self.description.split('.')[1:]) 
     return s2 
    else: 
     return None 

使用[1:]給你,其中包括第二個元素,而這一次在列表之後的所有元素的新元素。

1

雖然split()是正確的,但它不是最優的:它將無用地分割您的整個文本,而您只需要第一次出現。

使用partition()會回報你一個3元組:

first_sentence, separator, the_rest = text.partition('.') # or '. ' 
# if you don't care about the first sentence, it can be written shorter: 
_, _, the_rest = text.partition('.') 

注意,如果有一個在你的文字沒有分隔符(句號),它會砍掉整個文本,並留下一個空串。如果您想更加妥善地處理這個問題,嘗試這樣的事:

def chopFirstSentence(text): 
    first_sentence, _, the_rest = text.partition('. ') 
    return the_rest or first_sentence 

這工作,因爲如果the_rest是空的,將評估爲False,並first_sentence將然後返回。如果the_rest不爲空,則計算or將短路並立即返回the_rest

另請注意,上述算法是天真的;它會在諸如「聖路易」或「中校」或「比較富」等明顯沒有嵌入句斷的事物上破裂。通過檢查最後一個字,你可以排除大多數這種誤報。然後find()/rfind()和可能的正則表達式是你的朋友。