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

时间:2010-09-05 11:43:07

标签: python regex padding

用空格填充标点符号的有效方法是什么?

输入:

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

期望的输出:

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

评论:

  1. 我不在乎令牌之间有多少个空格。 (但最终他们需要崩溃)
  2. 我不想填写所有标点符号。说我只对。,!?()感兴趣。

3 个答案:

答案 0 :(得分:18)

您可以使用正则表达式来匹配您感兴趣的标点符号并用空格包围它们,然后使用第二步折叠文档中任意位置的多个空格:

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 . . .

答案 1 :(得分:2)

如果一个空格不存在,这将只添加一个空格,并且不会破坏现有空格或其他空白字符:

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

这可以通过在标点符号和非空格之间找到零宽度位置并在那里添加空格来实现。
请注意, 在字符串的开头或结尾添加空格,但可以通过将环视更改为(?<=[^ ])(?=[^ ])来轻松完成。

请参阅操作: http://ideone.com/BRx7w

答案 2 :(得分:0)

如果使用python3,请使用maketrans()函数。

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