gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 11:18:11 27 4
gpt4 key购买 nike

我正在移植一些调用 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/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com