python:用空格填充标点符号(保持标点)

17 投票
3 回答
19893 浏览
提问于 2025-04-16 03:44

如何有效地在标点符号周围添加空格?

输入:

s = 'bla. bla? bla.bla! bla...'

想要的输出:

 s = 'bla . bla ? bla . bla ! bla . . .'

备注:

  1. 我不在乎标记之间有多少空格。(不过最终需要把它们合并成一个空格)
  2. 我不想给所有标点符号添加空格。比如,我只对 .,!?() 这些感兴趣。

3 个回答

5

这段代码会在没有空格的地方添加一个空格,而且不会影响到已经存在的空格或其他空白字符:

s = re.sub('(?<! )(?=[.,!?()])|(?<=[.,!?()])(?! )', r' ', s)

它的原理是找到标点符号和非空格字符之间的一个零宽度位置,然后在那个地方添加一个空格。
需要注意的是,它确实会在字符串的开头或结尾添加空格,但只要把查找条件改成 (?<=[^ ])(?=[^ ]),就可以很简单地做到这一点。

想看看效果吗?可以在这里查看:http://ideone.com/BRx7w

8

如果你使用的是python3,可以用maketrans()这个函数。

import string   
text = text.translate(str.maketrans({key: " {0} ".format(key) for key in string.punctuation}))
31

你可以用一种叫做正则表达式的工具,来找到你想要的标点符号,并在它们周围加上空格。接着,再进行第二步,把文档中多余的空格压缩成一个空格。

s = 'bla. bla? bla.bla! bla...'
import re
s = re.sub('([.,!?()])', r' \1 ', s)
s = re.sub('\s{2,}', ' ', s)
print(s)

结果:

bla . bla ? bla . bla ! bla . . .

撰写回答