背景
网络上一些文本里可能有不必要的空格,如果是中英文混杂的文本,需要删除汉字中间的空格,保留英文中间的空格,在Python里可以用re包来实现。
- 简体中文正则表达式
[\u4e00-\u9fa5]
(不含标点符号) - 空格正则表达式
\s
(等同于[\r\t\v\n]
) - 需要保留的内容放在括号里,后续用
\1\2
指代第1个括号和第2个括号里的内容
代码
原文: Hey Jane, 周 末 要 不要一起 吃早茶,叫上Jennie。
import re
x = 'Hey Jane, 周 末 要 不要一起 吃早茶,叫上Jennie。'
space_patten = re.compile(r'([\u4e00-\u9fa5])\s+([\u4e00-\u9fa5])')
x = space_patten.sub(r'\1\2', x)
print(x)
# Hey Jane, 周末 要不要一起吃早茶,叫上Jennie。
x = space_patten.sub(r'\1\2', x)
print(x)
# Hey Jane, 周末要不要一起吃早茶,叫上Jennie。
这里使用两次sub()的原因是:
第一次使用sub匹配到了[('周', '末'), ('要', '不'), ('起', '吃')]
,没有匹配到[('末', '要')]
,可见re.sub()
在对文本进行搜索时,不会再次搜索已经匹配到模式的字(末
)
如果原文不包含汉字空格汉字空格汉字
模式,仅使用一个sub就够了。