2010-09-05 56 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}))