Python - 如何删除汉字之间的空格,同时保留字符和数字之间的空格?

问题描述:

真正的问题可能会更复杂,但现在,我正在尝试做一些更容易的事情。我试图删除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'(?

我明白你需要删除的空间驻留在字母之间。

使用

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