真正的问题可能更复杂,但就目前而言,我尝试做的事情更容易一些。我试图删除2个中文/日文字符之间的空格,但同时保持数字和字符之间的空格。以下示例:
text = "今天特别 热,但是我买了 3 个西瓜。"
我想得到的输出是
text = "今天特别热,但是我买了 3 个西瓜。"
我尝试使用Python脚本和正则表达式:
import re
text = re.sub(r'\s(?=[^A-z0-9])','')
然而,结果是
text = '今天特别热,但是我买了 3个西瓜。'
所以我一直在努力思考如何在角色和数字之间保持空间?而且我不想使用在" 3"之间添加空格的方法。和"个"。
我会继续思考它,但如果你有想法,请告诉我......提前谢谢你!
答案 0 :(得分:4)
我理解您需要删除的空格位于字母之间。
使用
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)
将非消费型外观变为消费捕获组((...)
)。替换模式中的\1
和\2
是对捕获组值的反向引用。
import re
text = "今天特别 热,但是我买了 3 个西瓜。"
print(re.sub(r'(?<=[^\W\d_])\s+(?=[^\W\d_])', '', text))
// => 今天特别热,但是我买了 3 个西瓜。