strip 函数删除哪些特定字符?

Ric*_*cco 9 python

str.strip您可以在文档中找到以下内容:

chars参数是一个字符串,指定要删除的字符集。如果省略 或None,则chars参数默认删除空格。

现在我的问题是:哪些特定字符被视为空格?

这些函数调用共享相同的结果:

>>> ' '.strip()
''
>>> '\n'.strip()
''
>>> '\r'.strip()
''
>>> '\v'.strip()
''
>>> '\x1e'.strip()
''
Run Code Online (Sandbox Code Playgroud)

这个相关问题中,用户提到该str.strip函数适用于ASCII 空白字符的超集(换句话说, 的超集string.whitespace)。更具体地说,它适用于所有 unicode 空白字符。

此外,我相信(但我只是猜测,我没有证据)c.isspace()返回True的每个字符c也将被删除str.strip。那是对的吗?如果是这样,我想可以只c.isspace()对每个 unicode 字符c运行,并给出默认情况下删除的空白字符列表str.strip

>>> ' '.isspace()
True
>>> '\n'.isspace()
True
>>> '\r'.isspace()
True
>>> '\v'.isspace()
True
>>> '\x1e'.isspace()
True
Run Code Online (Sandbox Code Playgroud)

我的假设正确吗?如果是这样,我怎样才能找到一些证据?有没有更简单的方法来知道哪些特定字符被自动删除str.strip

etu*_*rdu 5

了解哪些字符被删除的最简单的方法str.strip()是循环遍历每个可能的字符并检查包含此类字符的字符串是否被更改str.strip()

c = 0
while True:
  try:
    s = chr(c)
  except ValueError:
    break
  if (s != s.strip()):
    print(f"{hex(c)} is stripped", flush=True)
  c+=1
Run Code Online (Sandbox Code Playgroud)

正如评论中所建议的,您还可以打印一个表格来检查 是否str.strip()str.split()str.isspace()共享有关空格的相同行为:

c = 0
print("char\tstrip\tsplit\tisspace")
while True:
  try:
    s = chr(c)
  except ValueError:
    break
  stripped = s != s.strip()
  splitted = not s.split()
  spaced = s.isspace()
  if (stripped or splitted or spaced):
    print(f"{hex(c)}\t{stripped}\t{splitted}\t{spaced}", flush=True)
  c+=1
Run Code Online (Sandbox Code Playgroud)

如果我运行上面的代码,我会得到:

char    strip   split   isspace
0x9     True    True    True
0xa     True    True    True
0xb     True    True    True
0xc     True    True    True
0xd     True    True    True
0x1c    True    True    True
0x1d    True    True    True
0x1e    True    True    True
0x1f    True    True    True
0x20    True    True    True
0x85    True    True    True
0xa0    True    True    True
0x1680  True    True    True
0x2000  True    True    True
0x2001  True    True    True
0x2002  True    True    True
0x2003  True    True    True
0x2004  True    True    True
0x2005  True    True    True
0x2006  True    True    True
0x2007  True    True    True
0x2008  True    True    True
0x2009  True    True    True
0x200a  True    True    True
0x2028  True    True    True
0x2029  True    True    True
0x202f  True    True    True
0x205f  True    True    True
0x3000  True    True    True
Run Code Online (Sandbox Code Playgroud)

所以,至少在 python 3.10.4 中,你的假设似乎是正确的。