2017-06-20 139 views
1

真正的問題可能會更復雜,但現在,我正在嘗試做一些更容易的事情。我試圖刪除2箇中文/日文字符之間的空格,但同時保持數字和字符之間的空格。下面舉個例子:Python - 如何刪除漢字之間的空格,同時保留字符和數字之間的空格?

text = "今天特別 熱,但是我買了 3 個西瓜。" 

我想要得到的輸出是

text = "今天特別熱,但是我買了 3 個西瓜。" 

我試圖用Python腳本和正則表達式:

import re 
text = re.sub(r'\s(?=[^A-z0-9])','') 

然而,結果是

text = '今天特別熱,但是我買了 3個西瓜。' 

所以我很掙扎阿博我怎樣才能始終保持角色和數字之間的距離?而且我不想使用在「3」和「個」之間添加空格的方法。

我會繼續思考它,但讓我知道你是否有想法......非常感謝你提前!

+0

只是爲了確保:這是Python 3的? –

+0

@WiktorStribiżewyep – Penny

+1

如果您需要,嘗試're.sub(r'(?<= [^ \ W \ d _])\ s +(?= [^ \ W \ d_])','',text)'在字母之間刪除1個以上的空格。 –

回答

1

我明白你需要刪除的空間駐留在字母之間。

使用

re.sub(r'(?<=[^\W\d_])\s+(?=[^\W\d_])', '', text) 

詳細

  • (?<=[^\W\d_]) - 積極的回顧後,立即要求一個Unicode字母到當前位置的左邊
  • \s+ - 1+空格(除去+如果預計只有一個)
  • (?=[^\W\d_]) - 正向前查找,需要立即在當前位置右側輸入Unicode字母。

您不需要re.U標誌,因爲它在默認情況下在Python 3中處於啓用狀態。不過您在Python 2中需要它。

你也可以使用捕獲組:

re.sub(r'([^\W\d_])\s+([^\W\d_])', r'\1\2', text) 

其中非消耗lookarounds都變成消耗捕獲組((...))。替換模式中的\1\2是對捕獲組值的反向引用。

看到一個Python 3 online demo

import re 
text = "今天特別 熱,但是我買了 3 個西瓜。" 
print(re.sub(r'(?<=[^\W\d_])\s+(?=[^\W\d_])', '', text)) 
// => 今天特別熱,但是我買了 3 個西瓜。 
+1

非常感謝! – Penny

相關問題