python: пунктуация с пробелами (сохраняя пунктуацию) - PullRequest
11 голосов
/ 05 сентября 2010

Какой эффективный способ дополнить пунктуацию пробелами?

ввод:

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

желаемый вывод:

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

Комментарии:

  1. Мне все равно, сколько пробелов между токенами. (но их нужно будет свернуть в конце концов)
  2. Я не хочу дополнять все знаки препинания. Скажи, что меня интересует только.,!? ().

Ответы [ 3 ]

18 голосов
/ 05 сентября 2010

Вы можете использовать регулярное выражение для соответствия интересующим вас знаками пунктуации и окружать их пробелами, а затем использовать второй шаг, чтобы свернуть несколько пробелов в любом месте документа:

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 . . .
2 голосов
/ 05 сентября 2010

Это добавит ровно один пробел, если его нет, и не разрушит существующие пробелы или другие символы пробела:

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

Это работает путем нахождения позиции нулевой ширины между пунктуацией ине пробел и добавление пробела там.
Обратите внимание, что делает добавлением пробела в начале или конце строки, но это легко сделать, изменив внешний вид на (?<=[^ ]) и (?=[^ ]).

См. В действии: http://ideone.com/BRx7w

0 голосов
/ 09 октября 2017

Если вы используете python3, используйте функцию maketrans ().

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