python - split() 将哪些字符视为空格?

标签 python python-2.x cpython

我正在移植一些调用 split() 的 Python 2 代码在字符串上,所以我需要知道它的确切行为。 The documentation声明当您不指定 sep 时论点,“连续空白的运行被视为单个分隔符”。

不幸的是,它没有指定将是哪些字符。有一些明显的竞争者(如空格、制表符和换行符),但 Unicode 包含许多其他候选者。

哪些字符被 split() 认为是空格?

由于答案可能是特定于实现的,我的目标是 CPython。

(注意:我自己研究了这个答案,因为我在任何地方都找不到它,所以我会在这里发布它,希望对其他人有益。)

最佳答案

不幸的是,这取决于您的字符串是否是 strunicode (至少,在 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 使用(看起来他们对 strunicode 使用相同的函数实现,但为每种类型分别编译它,某些宏实现不同)。文档字符串对这组字符的描述如下:

    Unicode characters having the bidirectional type 'WS', 'B' or 'S' or the category 'Zs'

    关于python - split() 将哪些字符视为空格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61566711/

    相关文章:

    python - PyPy:获取对字符串的原始访问

    python - 从带有子列表的列表中创建值字典

    python - 为什么 %time 输出是 Wall time : 0 ns in Jupyter Notebook with IPython?

    python - 如何删除 Pandas 数据框中的唯一行

    python - isinstance() 和 issubclass() 返回冲突的结果

    python - 我无法使用 python 将空字符串转换为整数

    python - 生物信息学:将列表项与字典键匹配并打印匹配键

    python - 如何在不复制列的情况下合并 Pandas 数据框

    Python:__slots__ 及其描述符的使用

    java - 编译为字节码,Java 与 Python。所用时间不同的原因是什么?