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

Sci*_*ion 12 python regex padding

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

输入:

s = 'bla. bla? bla.bla! bla...'
Run Code Online (Sandbox Code Playgroud)

期望的输出:

 s = 'bla . bla ? bla . bla ! bla . . .'
Run Code Online (Sandbox Code Playgroud)

评论:

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

Mar*_*ers 21

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

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

结果:

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


Kob*_*obi 5

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

s = re.sub('(?<! )(?=[.,!?()])|(?<=[.,!?()])(?! )', r' ', s)
Run Code Online (Sandbox Code Playgroud)

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

查看实际操作:http : //ideone.com/BRx7w


小智 5

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

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