2010-09-05 179 views
4

什么是用空格填充标点符号的有效方法?python:用白色空格填充标点符号(保持标点符号)

输入:

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

所需的输出:

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

评论:

  1. 我不在乎有多少空格标记之间的存在。 (但他们最终需要折叠)
  2. 我不想填充所有标点符号。说我只对。,!?()感兴趣。
+2

'<细节>'你不会期望最后一个点后面有空格么? – Kobi 2010-09-05 11:53:54

回答

8

您可以使用正则表达式匹配的标点符号,你有兴趣,并用空格包围他们,然后用第二个步骤倒塌多个空格的文件中的任何地方:

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

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

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

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

见行动:http://ideone.com/BRx7w

+0

这里是我没有复制太多代码的版本(我不知道任何Python):http://ideone.com/PuVz5 – Kobi 2010-09-05 12:23:34

0

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

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