我正在移植一些在字符串上调用split()
的Python代码,因此我需要知道它的确切行为。 The documentation指出当您不指定sep
参数时,“连续的空白行将被视为单个分隔符”。不幸的是,它没有指定which字符。有一些明显的竞争者(例如空格,制表符和换行符),但是Unicode包含许多其他候选者。 split()
认为哪些字符是空格?
((注:我自己对此问题进行了研究,因为我在任何地方都找不到它,所以我会在这里发布它,希望对其他人有利。)
不幸的是,这取决于您的字符串是str
还是unicode
。
如果是str
,答案很简单:
0x09
选项卡0x0a
换行符0x0b
垂直制表符0x0c
换页0x0d
回车0x20
空格来源:这些是PY_CTF_SPACE
中带有Python/pyctype.c
的字符,由Python/pyctype.c
使用,由Py_ISSPACE
使用,由Py_ISSPACE
使用。
如果是STRINGLIB_ISSPACE
,则有29个字符,除上述字符外:
STRINGLIB_ISSPACE
至split_whitespace
:文件/组/记录/单元分隔符split_whitespace
:下一行unicode
:非中断空间U+001c
:Ogham空间标记0x001f
至U+0085
:各种固定大小的空格(例如Em空格),但请注意,零宽度空格已包括在[[not中]U+00a0
:行分隔符U+1680
:段落分隔符U+2000
:狭窄的无中断空间0x200a
:中等数学空间U+2028
:表意空间仅ASCII字符串可能会根据U+2029
或U+202f
进行不同的分割!
U+205f
中列出的字符,U+3000
使用了str
使用的字符(看起来它们对unicode
和_PyUnicode_IsWhitespace
使用相同的函数实现,但是针对每种类型分别对其进行编译,并以不同的方式实现某些宏)。