2016-10-22 71 views
3

我想從字符串中刪除首字母縮略詞中的句點,但我也希望o定期(例如在句子結尾)保留句號。正則表達式來刪除首字母縮略詞中的句點?

所以下面的句子:

"The C.I.A. is a department in the U.S. Government." 

應該成爲

"The CIA is a department in the US Government." 

有沒有乾淨的方式來做到這一點使用Python?到目前爲止,我有兩個步驟:

words = "The C.I.A. is a department in the U.S. Government." 
words = re.sub(r'([A-Z].[A-Z.]*)\.', r'\1', words) 
print words 
# The C.I.A is a department in the U.S Government.  
words = re.sub(r'\.([A-Z])', r'\1', words) 
print words 
# The CIA is a department in the US Government. 
+4

可以有任何單字母縮寫嗎? –

+0

'etc.'呢?如果你只關心大寫單個字母后跟一個點,你可以使用're.sub(r'\ b([AZ])\。',r'\ 1',words)',但這不是一般的解。 –

+0

歸結到這個問題*「你怎麼知道什麼是一個縮略語而不是一個句子?」*一旦你有了答案,那麼你就可以開始構建一個正則表達式。 – zvone

回答

8

大概是這樣嗎?

>>> re.sub(r'(?<!\w)([A-Z])\.', r'\1', s) 
'The CIA is a department in the US Government.' 

更換已經由一個大寫的單個字母開頭所提供的單個字母沒有立即在\w字符集前面任何單獨點。後面的標準由負反序斷言 - (?<!\w)執行。

+1

很想知道OP是否仍然在尋找像'etc.'這樣的東西。否則,這很好。 – idjaw

+0

@idjaw啊,是的,很好的觀察。他們需要證實這一點。 –

+0

您可能還想要解釋代碼。實際上,在句子中'I'也是失敗的。 –

相關問題