python,正则表达式分裂和特殊字符

ale*_*oat 11 python regex unicode split

如何使用空格作为分隔符正确分割包含具有特殊字符的句子的字符串?使用正则表达式分割方法我无法获得所需的结果.

示例代码:

# -*- coding: utf-8 -*-
import re


s="La felicità è tutto" # "The happiness is everything" in italian
l=re.compile("(\W)").split(s)

print " s> "+s
print " wordlist> "+str(l)
for i in l:
    print " word> "+i
Run Code Online (Sandbox Code Playgroud)

输出是:

 s> La felicità è tutto
 wordlist> ['La', ' ', 'felicit', '\xc3', '', '\xa0', '', ' ', '', '\xc3', '', '\xa8', '', ' ', 'tutto']
 word> La
 word>  
 word> felicit
 word> Ã
 word> 
 word> ?
 word> 
 word>  
 word> 
 word> Ã
 word> 
 word> ?
 word> 
 word>  
 word> tutto
Run Code Online (Sandbox Code Playgroud)

而我正在寻找一个输出:

 s> La felicità è tutto
 wordlist> ['La', ' ', 'felicità', ' ', 'è', ' ', 'tutto']
 word> La
 word>  
 word> felicità
 word>  
 word> è
 word>  
 word> tutto
Run Code Online (Sandbox Code Playgroud)

需要注意的是,s是从另一个方法返回的字符串,所以我不能强制编码

s=u"La felicità è tutto"
Run Code Online (Sandbox Code Playgroud)

关于Unicode和reg-ex的官方python文档,我没有找到令人满意的解释.

谢谢.

亚历山德罗

And*_*are 16

您正则表达式应该(\s) 不是(\W)这样的:

l = re.compile("(\s)").split(s)
Run Code Online (Sandbox Code Playgroud)

上面的代码将为您提供所需的确切输出.但是以下行更有意义:

l = re.compile("\s").split(s)
Run Code Online (Sandbox Code Playgroud)

它会拆分空白字符,并不会将所有空格作为匹配项.你可能需要它们,所以我发布了两个答案.