2017-02-06 79 views
1

我試圖刪除一些預定義的連續標點符號並將其替換爲第一個。因此:正則表達式:匹配連續的標點符號並替換第一個

  1. 美國, - >美國。
  2. 美國。 - >美國。
  3. 美國。 - >美國。
  4. hiiii !!!, - > hiiii!

我嘗試下面的代碼:

import re 
r = re.compile(r'([.,/#!$%^&*;:{}=-_`~()])*\1') 
n = r.sub(r'\1', "ews by almalki : Tornado, flood deaths reach 18 in U.s., more storms ahead ") 
print(n) 

回答

4

你只需要拍攝第一標點符號和匹配休息:

([.,/#!$%^&*;:{}=_`~()-])[.,/#!$%^&*;:{}=_`~()-]+ 

regex demo

注意, -必須放在角色類的結尾(或開始),以便不創建範圍(或者它可以在角色類中轉義)。

詳細

  • ([.,/#!$%^&*;:{}=_`~()-]) - 捕獲組與您定義
  • [.,/#!$%^&*;:{}=_`~()-]+的標點符號 - 1+標點符號

Python demo

import re 
r = re.compile(r'([.,/#!$%^&*;:{}=_`~()-])[.,/#!$%^&*;:{}=_`~()-]+') 
n = r.sub(r'\1', "ews by almalki : Tornado, flood deaths reach 18 in U.s., more storms ahead ") 
print(n) 
+0

沒有包括'@'。 – MYGz

+0

@MYGz那麼,這就是爲什麼我使用了「你定義的標點符號」措辭。 'string.punctuation'產生'!「#$%&'()* +, - 。/ :; <=>?@ [\]^_ \'{|}〜'符號,字符類看起來像'[[ \\!「#$%&'()* +,。/ :; <=>?@ [\]^_ \'{|}〜 - ]'然後([正則表達式演示](https://regex101.com/r/nrrOOZ/1))。 –

相關問題