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

2024-04-29 06:31:32 发布

您现在位置:Python中文网/ 问答频道 /正文

 # -*- 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

打印。。。

 [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']

这似乎不仅不雅,而且慢。

你能找到更好的解决办法吗?也许用正则表达式?


Tags: stringchmokujakzmierzajczemulecz
3条回答

如果必须重新使用正则表达式并使用re.split,请使用re.compile

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)

这样就可以了。(我承认我还没有测试过)

import re, string
s = 'your string ...'
re.split('\s'+''.join(string.punctuation), s)

编辑:不要用我的。马哈茂德·阿卜杜勒卡德的上述回答更好。

使用Regular expressions

# -*- coding: utf-8 -*-
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ć."
print re.split('\W+', s, flags=re.UNICODE)

当然,您可以使用一个更具体的regex,但这一个似乎符合法案。

注意,flags参数是针对python 2.7+的。如果您使用的是早期版本,只需使用'\W+(?u)'作为正则表达式。

相关问题 更多 >