11

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

示例代码:

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

输出是:

 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

当我正在寻找类似的输出时:

 s> La felicità è tutto
 wordlist> ['La', ' ', 'felicità', ' ', 'è', ' ', 'tutto']
 word> La
 word>  
 word> felicità
 word>  
 word> è
 word>  
 word> tutto

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

s=u"La felicità è tutto"

在 Unicode 和 reg-ex 的官方 python 文档中,我没有找到令人满意的解释。

谢谢。

亚历山德罗

4

5 回答 5

16

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

l = re.compile("(\s)").split(s)

上面的代码将为您提供您请求的确切输出。但是,以下行更有意义:

l = re.compile("\s").split(s)

它在空白字符上拆分,并且不会为您提供所有空格作为匹配项。不过,您可能需要它们,所以我发布了两个答案。

于 2009-03-15T11:32:00.510 回答
4

尝试为正则表达式定义编码:

l=re.compile("\W", re.UNICODE).split(s)
于 2009-03-15T11:36:49.017 回答
3

我认为在这种情况下使用正则表达式有点过头了。如果您唯一要做的是将字符串拆分为空格字符,我建议您使用字符串上的split方法

s = 'La felicità è tutto'
words = s.split()
于 2009-03-15T12:59:43.000 回答
3

使用 unicode 正则表达式将起作用,只要您给它一个 unicode 字符串开头(您在提供的示例中没有)。试试这个:

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

print " s> "+s
print " wordlist> "+str(l)
for i in l:
    print " word> "+i

结果:

 s> La felicità è tutto
 wordlist> [u'La', u' ', u'felicit\xe0', u' ', u'\xe8', u' ', u'tutto']
 word> La
 word>  
 word> felicità
 word>  
 word> è
 word>  
 word> tutto

您的字符串s是作为一种str类型创建的,并且可能采用 utf-8 编码,这与 unicode 不同。

于 2010-07-13T05:17:58.203 回答
0

好吧,在对 Andrew Hare 的回答进行了一些进一步测试之后,我发现 ()[]- 等字符不再被视为分隔符,而我想用由字母数字值集最终扩展为重音字符(即,在 unicode 中标记为字母数字的所有内容)。因此,kgiannakakis 的解决方案更正确,但它错过了将字符串 s 转换为 unicode 格式的过程。

以第一个示例的扩展为例:

# -*- coding: utf-8 -*-
import re
s="(La felicità è tutto)"#no explicit unicode given string (UTF8)
l=re.compile("([\W])",re.UNICODE).split(unicode(s,'utf-8'))#split on s converted to unicode from utf8

print " string> "+s
print " wordlist> "+str(l)
for i in l:
    print " word> "+i

现在的输出是:

 string> (La felicità è tutto)
 wordlist> [u'', u'(', u'La', u' ', u'felicit\xe0', u' ', u'\xe8', u' ', u'tutto', u')', u'']
 word> 
 word> (
 word> La
 word>  
 word> felicità
 word>  
 word> è
 word>  
 word> tutto
 word> )
 word> 

这正是我正在寻找的。

干杯:)

亚历山德罗

于 2009-03-15T14:22:00.947 回答