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

时间:2011-03-03 19:45:34

标签: 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

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

3 个答案:

答案 0 :(得分:8)

由于\t确实代表字符串中的制表符(如\n是新行字符,请参见此处list of valid escape sequences),但\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']   

答案 1 :(得分:1)

string.split()接受一个字符串作为参数,并根据该字符串进行拆分。就这样。 \t是ASCII标签字符,而\s在这种情况下只是\ + s

对于正则表达式拆分,您要导入re并使用re.split()

答案 2 :(得分:1)

string.split()函数不接受正则表达式参数。试试re.split()

>>> import re
>>> re.split(r"\s+", "a  b")
['a', 'b']