2017-02-12 52 views
1

我寫了下面的程序提取所有的模式(可能連字符的話,標點符號)用撇號作爲最後可能的字母提取的話

sentence="Narrow-minded people are happy although it's cold ! I'm also happy" 
print(re.split('([^-\w])',sentence)) 

結果是:

['Narrow-minded', ' ', 'people', ' ', 'are', ' ', 'happy', ' ', 'although', ' ', 'it', "'", 's', ' ', 'cold', ' ', '', '!', '', ' ', 'I', "'", 'm', ' ', 'also', ' ', 'happy'] 

的問題是如何在單詞結尾處考慮(添加)撇號。例如:我們想檢索"it'"而不是夫婦"it", "'"

回答

2

您可以添加一個撇號作爲特例結尾的詞:

print(re.split('([\w-]+\'|[^-\w])',sentence)) 

在這種情況下,這句話被分成上要麼

  • 隨後的一個或多個\w -characters序列由撇號([\w-]+\'部分
  • 或任何不是短劃線的字符或\w-特徵([^-\w]部分)

這導致:

['Narrow-minded', ' ', 'people', ' ', 'are', ' ', 'happy', ' ', 'although', ' ', '', "it'", 's', ' ', 'cold', ' ', '', '!', '', ' ', '', "I'", 'm', ' ', 'also', ' ', 'happy'] 

注意,這確實增加了列表中的空字符串('')的數量,擺脫那些你可以過濾列表:

print(filter(None, re.split('([\w-]+\'|[^-\w])',sentence))) 

其中產生:

['Narrow-minded', ' ', 'people', ' ', 'are', ' ', 'happy', ' ', 'although', ' ', "it'", 's', ' ', 'cold', ' ', '!', ' ', "I'", 'm', ' ', 'also', ' ', 'happy'] 
+0

Suprinsgly有一個小錯誤,在'althou嗯'有''然後''而不是隻有「」 – Hana

+1

@Hana我已經更新了答案以提供更多詳細信息。鑑於原始輸出已經包含感嘆號周圍的空字符串(''''),我認爲擁有更多內容不是問題。 – ebo

+0

我們如何才能改善自己的表達以將例外(我們不希望重新應用的兩個特殊詞語(例如O'Neill) – Hana