python:用空格填充标点符号(保持标点)
如何有效地在标点符号周围添加空格?
输入:
s = 'bla. bla? bla.bla! bla...'
想要的输出:
s = 'bla . bla ? bla . bla ! bla . . .'
备注:
- 我不在乎标记之间有多少空格。(不过最终需要把它们合并成一个空格)
- 我不想给所有标点符号添加空格。比如,我只对 .,!?() 这些感兴趣。
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 . . .