Python:按所有空格字符分割字符串

为了在python中用空格分割字符串,通常使用split不带参数的字符串方法:

>>> 'a\tb c\nd'.split()

['a', 'b', 'c', 'd']

但是昨天我碰到了一个在单词之间也使用零宽度空间的字符串。在将我的新知识变成了简短的黑魔法表演(在JavaScript众人中)之后,我想问一下如何更好地按所有空白字符进行分割,因为这样split做还不够:

>>> u'a\u200bc d'.split()

[u'a\u200bc', u'd']

看来一般建议的解决方案sth都可以,但是取决于某些OS设置或Python编译选项。很高兴知道确定的原因(以及是否可以在Windows中打开设置)。

cptphil找到了一个很好的链接,使所有内容都变得清晰:

因此,我就此问题与Unicode技术委员会联系,并迅速收到了回复。他们指出ZWSP曾被视为空白,但在Unicode 4.0.1中已更改

来自unicode网站的报价:

将U + 200B零宽度空间从Zs更改为Cf(2003.10.27)

使用U +

200B零宽度空间(ZWSP)一直存在问题。该字符的功能是允许在通常不允许的位置处换行,因此在功能上是具有Cf常规类别的格式字符。此行为已在Unicode标准中得到了很好的记录,并且该字符在Unicode字符数据库中不被视为空白字符。但是,由于历史原因,常规类别仍然是Zs(空格分隔符),这会导致字符被滥用。ZWSP也是唯一不是空格的Zs字符。常规类别可能导致对规则D13基本字符的误解,因为它允许ZWSP作为组合标记的基础。

建议将U + 200B的一般类别从Zs更改为Cf。

解决方法:已关闭。在Unicode版本4.0.1中,U + 200B的常规类别将从Zs更改为Cf。

更改随后反映在Python中。u'\u200B'.isspace()在Python 2.5.4和2.6.5中的结果是True,在Python

2.7.1中已经是False

对于其他空格字符,常规split就足够了:

>>> u'a\u200Ac'.split()

[u'a', u'c']

如果这还不够,请按照Gabi Purcaru以下建议一一添加字符。

回答:

事实证明\ u200b在技术上没有定义为空格,因此即使unicode标志打开,python也无法将其识别为匹配\ s。因此,必须将其视为非空白字符。

http://en.wikipedia.org/wiki/Whitespace_character#Unicode

http://bugs.python.org/issue13391

import re

re.split(ur"[\u200b\s]+", "some string", flags=re.UNICODE)

以上是 Python:按所有空格字符分割字符串 的全部内容, 来源链接: utcz.com/qa/422455.html

回到顶部