为什么line.split('\ s')与line.split()的作用相同?

sof*_*eer 0 python split

我有一个非常非常简单的程序,它解析一个csv文件,该文件有一行文本记录,其列由一个制表符分隔.

我理解split()默认情况下拆分空格,因此不需要显式指定空格模式,但我的问题是为什么明确指定的空格模式不起作用?或者'\ s'或r'\ s'不是正确的模式/正则表达式?我在stackoverflow上搜索并发现提到字符串split()是一个较旧的方法,我不太懂,因为我对python很新.字符串split()不支持正则表达式吗?

这是我的代码:

#!/usr/bin/env python
import os
import re
import sys

f = open(sys.argv[1])
for line in f:
    field = line.split()
    field2 = line.split('\s')
    print field[1], field2[1]
f.close
Run Code Online (Sandbox Code Playgroud)

我尝试使用line.split(r'\ s'),但这也不起作用,但是line.split('\ t')可以正常工作.

Fel*_*ing 9

因为\t实际上表示字符串中的制表符(就像\n新行字符一样,请参见此处的有效转义序列列表),但它\s是白色空格的特殊正则表达式字符类.

str.split[docs]不接受正则表达式.如果要使用正则表达式进行拆分,则必须使用re.split [docs].

示范:

>>> import re
>>> str = "This\sis a weird\sstring"
>>> str.split("\s")                    # treated literally
['This', 'is a weird', 'string'] 
>>> re.split("\s", str)                # regex
['This\\sis', 'a', 'weird\\sstring']   
Run Code Online (Sandbox Code Playgroud)

  • 菲利克斯,所以字符串拆分不同于正则表达式拆分?我是python的新手,因此很困惑. (2认同)
  • 是的,re.split和str.split是不同的.两者的文档可以在这里找到:http://docs.python.org/library/re.html,http://docs.python.org/library/stdtypes.html (2认同)