Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 什么';使用空格或标点符号作为分隔符,将unicode字符串拆分为列表的快速方法是什么?_Python_Regex - Fatal编程技术网

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

Python 什么';使用空格或标点符号作为分隔符,将unicode字符串拆分为列表的快速方法是什么?,python,regex,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

印刷品

 # -*- 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
它似乎不仅不雅,而且慢

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

使用

当然,您可以使用更具体的正则表达式,但这一个似乎符合要求

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

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

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

如果需要重复使用正则表达式并使用


我会使用nltk,原因如下:

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)

Regex:22.7673070431 nltk:16.1646370888

的可能重复项,或者他/她可以使用re.compile()编译正则表达式,并让它接受flags参数。很好地抓住了“\W+”!向上投票作为我的解决方案,虽然更紧凑,但不考虑其中包含数字的字符串。@zarkdav:您的解决方案正确地拆分了“Mary had 1 lamb”或“我在EuroScipy2010”,因此我向上投票了您的解决方案。:)我测试了,但我没有回答。。。!
# -*- 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)
import re, string
s = 'your string ...'
re.split('\s'+''.join(string.punctuation), s)
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)
# coding: utf-8
from time import time
import nltk
import string
import re


def bench(n,s):
    start_1 = time()
    regex = regex = re.compile(r'[%s\s]+' % re.escape(string.punctuation))
    for i in xrange(n):
        regex.split(s)
    stop_1 = time()
    start_2 = time()
    for i in xrange(n):
        nltk.wordpunct_tokenize(s)
    stop_2=time()
    print "Regex: {} nltk:{}".format((stop_1-start_1),(stop_2-start_2))


bench(1000000, u"Dobre uczynki są jak dobre poematy. Można łatwo uchwycić, ku czemu zmierzają, lecz nie zawsze da się je racjonalnie wytłumaczyć.")