3

是否可以?

此代码适用于Python3

In [1]: import re

In [2]: re.split(r'\W+', 'Les Misérables')
Out[2]: ['Les', 'Misérables']

但它在Python2中不起作用:

In [1]: import re

In [2]: re.split(r'\W+', u'Les Misérables')
Out[2]: [u'Les', u'Mis', u'rables']

这也不起作用(在具有es_ES.UTF-8语言环境的 Linux 上测试):

In [1]: import locale

In [2]: locale.setlocale(locale.LC_ALL, 'es_ES.UTF-8')
Out[2]: 'es_ES.UTF-8'

In [3]: import re

In [4]: re.split(ur'\W+', u'Les Misérables', re.U|re.L)
Out[4]: [u'Les', u'Mis', u'rables']

有没有办法让正则表达式在Python2中与 Unicode 一起工作?

注意:问题是关于获取 Unicode 感知匹配。我知道我可以只使用 ASCII 类重写上面的正则表达式来分隔单词。

4

1 回答 1

4

你的错误是你在错误的地方添加了标志(标志应该是第四个参数)。

>>> import re
>>> re.split(r'(?u)\W+', u'Les Misérables')
[u'Les', u'Mis\xe9rables']
>>> re.split(ur'\W+', u'Les Misérables', 0, re.U)
[u'Les', u'Mis\xe9rables']

为了避免这些问题,我建议使用内联标志((?u)如上)。

于 2013-05-26T15:36:29.400 回答