将unicode字符串拆分成列表的快速方法是什么,使用空格或标点符号作为分隔符?

Mac*_*rko 3 python regex

 # -*- coding: utf-8 -*-
 import string
 s = u"Dobre uczynki s? jak dobre poematy. Mo?na ?atwo uchwyci?, ku czemu zmierzaj?, lecz nie zawsze da si? je racjonalnie wyt?umaczy?."
 exclude = set(string.punctuation)
 s = ''.join(ch for ch in s if ch not in exclude)
 s = s.split()
 print s
Run Code Online (Sandbox Code Playgroud)

打印...

 [u'Dobre', u'uczynki', u's\u0105', u'jak', u'dobre', u'poematy', u'Mo\u017cna', u'\u0142atwo', u'uchwyci\u0107', u'ku', u'czemu', u'zmierzaj\u0105', u'lecz', u'nie', u'zawsze', u'da', u'si\u0119', u'je', u'racjonalnie', u'wyt\u0142umaczy\u0107']
Run Code Online (Sandbox Code Playgroud)

它似乎不仅不优雅,而且速度慢.

你能找到更好的解决方案吗?也许使用正则表达式?

Mah*_*der 6

使用re.compile如果你将不得不重新使用正则表达式,并使用re.split.

import string
import re

s = u"Dobre uczynki s? jak dobre poematy. Mo?na ?atwo uchwyci?, ku czemu zmierzaj?, lecz nie zawsze da si? je racjonalnie wyt?umaczy?."
regex = re.compile(r'[%s\s]+' % re.escape(string.punctuation))
print regex.split(s)
Run Code Online (Sandbox Code Playgroud)