我有一个非常简单的程序,它解析一个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')可以正常工作。
答案 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']