Python - 如何删除汉字之间的空格,同时保留字符和数字之间的空格?
问题描述:
真正的问题可能会更复杂,但现在,我正在尝试做一些更容易的事情。我试图删除2个中文/日文字符之间的空格,但同时保持数字和字符之间的空格。下面举个例子:Python - 如何删除汉字之间的空格,同时保留字符和数字之间的空格?
text = "今天特别 热,但是我买了 3 个西瓜。"
我想要得到的输出是
text = "今天特别热,但是我买了 3 个西瓜。"
我试图用Python脚本和正则表达式:
import re
text = re.sub(r'\s(?=[^A-z0-9])','')
然而,结果是
text = '今天特别热,但是我买了 3个西瓜。'
所以我很挣扎阿博我怎样才能始终保持角色和数字之间的距离?而且我不想使用在“3”和“个”之间添加空格的方法。
我会继续思考它,但让我知道你是否有想法......非常感谢你提前!
答
我明白你需要删除的空间驻留在字母之间。
使用
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
只是为了确保:这是Python 3的? –
@WiktorStribiżewyep – Penny
如果您需要,尝试're.sub(r'(?