我正在移植一些调用 split()
的 Python 2 代码在字符串上,所以我需要知道它的确切行为。 The documentation声明当您不指定 sep
时论点,“连续空白的运行被视为单个分隔符”。
不幸的是,它没有指定将是哪些字符。有一些明显的竞争者(如空格、制表符和换行符),但 Unicode 包含许多其他候选者。
哪些字符被 split()
认为是空格?
由于答案可能是特定于实现的,我的目标是 CPython。
(注意:我自己研究了这个答案,因为我在任何地方都找不到它,所以我会在这里发布它,希望对其他人有益。)
最佳答案
不幸的是,这取决于您的字符串是否是 str
或 unicode
(至少,在 CPython 中 - 我不知道这种行为是否实际上是由任何地方的规范强制执行的)。
如果是 str
,答案很简单:
0x09
标签 0x0a
换行 0x0b
垂直标签 0x0c
换页 0x0d
回车 0x20
空间 来源:这些是带有
PY_CTF_SPACE
的字符在 Python/pyctype.c
,由 Py_ISSPACE
使用,由 STRINGLIB_ISSPACE
使用,由 split_whitespace
使用.如果是
unicode
, 共有 29 个字符,除上述之外还有:U+001c
通过 0x001f
: 文件/组/记录/单位分隔符 U+0085
: 下一行 U+00a0
:不间断空格U+1680
: Ogham Space Mark U+2000
通过 0x200a
: 各种固定大小的空间(例如 Em Space),但请注意,不包括零宽度空间 U+2028
: 行分隔符 U+2029
: 段落分隔符 U+202f
:狭窄的不间断空间U+205f
:中等数学空间U+3000
: 表意空间请注意,前四个也是有效的 ASCII 字符,这意味着仅 ASCII 的字符串可能会根据它是否为
str
进行不同的拆分。或 unicode
!来源:这些是
_PyUnicode_IsWhitespace
中列出的字符,由 Py_UNICODE_ISSPACE
使用,由 STRINGLIB_ISSPACE
使用(看起来他们对 str
和 unicode
使用相同的函数实现,但为每种类型分别编译它,某些宏实现不同)。文档字符串对这组字符的描述如下:Unicode characters having the bidirectional type 'WS', 'B' or 'S' or the category 'Zs'
关于python - split() 将哪些字符视为空格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61566711/