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

Python - How to remove spaces between Chinese characters while remaining the spaces in between a character and a number?

真正的问题可能更复杂,但现在,我正在努力完成一些更容易的事情。我试图删除 2 个 Chinese/Japanese 字符之间的 space,但同时保持数字和字符之间的 space。下面是一个例子:

text = "今天特别 热,但是我买了 3 个西瓜。"

我想要得到的输出是

text = "今天特别热,但是我买了 3 个西瓜。"

我尝试使用 Python 脚本和正则表达式:

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

然而,结果是

text = '今天特别热,但是我买了 3个西瓜。'

所以我正在为如何始终保持字符和数字之间的 space 而苦恼?而且我不想使用在“3”和“个”之间添加space的方法。

我会继续考虑,但如果您有想法请告诉我...在此先感谢您!

我知道您需要删除的空格位于字母之间。

使用

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'', text)

非消耗性环顾四周变成消耗性捕获组 ((...))。替换模式中的 </code> 和 <code> 是对捕获组值的反向引用。

看到一个Python 3 online demo:

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