2017-03-03 82 views
3

對於大多數的新聞報道,第一個句子總是先從位置由連字符或逗號如下,得到實際的語句,如Python的新聞文章分爲第一句和重新使用

吉隆坡:朝鮮週一馬來西亞鎖定對 調查,導致金正恩兄弟被殺害,因爲 錄像片段在他在吉隆坡 機場受到致命襲擊時出現。

波特蘭 - 於 許可FairPoint通信公司要求監管機構停在Scarborough,戈勒姆,沃特維爾,肯納邦克和Cape 伊麗莎白監管座機 服務註冊新客戶。

我試圖用重新到後半段是主句,如單獨拿出作爲

朝鮮和馬來西亞在週一鎖定在 調查牛角爲領導人金正日殺害Jong-Un的兄弟,當他在Kuala 機場遭到致命襲擊時,出現了 影像。

我用下面的regrex將它們分開:

sep = re.split('-|:|--', sent) 

但是,這並不爲一切工作,第二句話的結果是:

['緬因州波特蘭\ xe2 \ x80 \ x94 FairPoint Communications已要求 監管機構允許其停止在Scarborough,Gorham,Waterville註冊 受監管的新客戶 Kennebunk and Cape伊麗莎白。']

與unicode有什麼關係?或者我需要在重新編碼中傳遞不同格式的連字符?

有沒有一種更好的方法來做到這一點?

謝謝。

+0

的分隔符是' '-'',你爲什麼各執'' - 」 '? – DyZ

+0

如果可能,你應該開始使用Python 3..6 – wwii

+0

@DYZ對不起,我沒有把它說得很清楚,因爲在一些語句中,它們使用''' – Sean

回答

2

正如你已經猜到,這個問題是存在的字符串中的Unicode字符,因爲沒有使用相同的值作爲一個破折號ASCII字符在PORTLAND, Maine — FairPoint Communications用隔膜,沒有很好的解釋,併成爲\xe2\x80\x94而比\u2014

有,讓你做你想要哪幾個選項:

  • 定義源代碼編碼爲Unicode(設置# -*- coding: utf-8 -*-作爲第一兩行)和額外的字符添加到你的正則表達式。
  • 我們也可以將字符串使用可用庫之一ACSII(見convert a unicode string
  • 使用Unicode兼容的正則表達式與RE(sep = re.split(ur'-|:|--|\u2014', sent)
  • 或在重勸documentation使用regex模塊。
+1

'''pattern ='[:{}]' .format(chr(8212))''' - 也可以工作(Python 3.6)。 – wwii

0

因爲,你的第二個句子中包含UNICODE字符,你需要define source code encoding執行你的代碼,Python的默認編碼之前ASCII。此外,你試圖用錯誤的字符--吐出這個句子。它需要(這是一個UNICODE)

蟒蛇demo

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 
import re 
sent = "PORTLAND, Maine — FairPoint Communications has asked regulators for permission to stop signing up new customers for regulated landline service in Scarborough, Gorham, Waterville, Kennebunk and Cape Elizabeth." 
sep = re.split('-|:|—', sent) 
print sep 
+0

OP想分割成chr(8212)'''*或*'''':'''''' – wwii