split()将哪个字符视为空格?

问题描述 投票:0回答:1

我正在移植一些在字符串上调用split()的Python代码,因此我需要知道它的确切行为。 The documentation指出当您不指定sep参数时,“连续的空白行将被视为单个分隔符”。不幸的是,它没有指定which字符。有一些明显的竞争者(例如空格,制表符和换行符),但是Unicode包含许多其他候选者。 split()认为哪些字符是空格?

((注:我自己对此问题进行了研究,因为我在任何地方都找不到它,所以我会在这里发布它,希望对其他人有利。)

python python-2.x
1个回答
0
投票

不幸的是,这取决于您的字符串是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_ISSPACEsplit_whitespace:文件/组/记录/单元分隔符
  • [split_whitespace:下一行
  • unicode:非中断空间
  • [U+001c:Ogham空间标记
  • [0x001fU+0085:各种固定大小的空格(例如Em空格),但请注意,零宽度空格已包括在[[not中]
  • [U+00a0:行分隔符
  • [U+1680:段落分隔符
  • U+2000:狭窄的无中断空间
  • [0x200a:中等数学空间
  • U+2028:表意空间
  • 请注意,前四个字符也是有效的ASCII字符,这意味着

    仅ASCII字符串可能会根据U+2029U+202f进行不同的分割!

    来源:这些是U+205f中列出的字符,U+3000使用了str使用的字符(看起来它们对unicode_PyUnicode_IsWhitespace使用相同的函数实现,但是针对每种类型分别对其进行编译,并以不同的方式实现某些宏)。
  • © www.soinside.com 2019 - 2024. All rights reserved.