为什么line.split('\s')和line.split()不一样?
我有一个非常简单的程序,它可以解析一个CSV文件,这个文件的每一行都是文本记录,列与列之间用一个制表符(Tab)分隔。
我知道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 个回答
1
string.split()
是一个方法,它需要一个字符串作为参数,然后根据这个字符串来进行分割。就这么简单。\t
是一个ASCII制表符,也就是我们常说的“Tab”键,而 \s
在这里其实就是 \
加上 s
的组合。
如果你想用正则表达式来分割字符串,就需要导入 re
模块,然后使用 re.split()
方法。
1
string.split()
这个函数不支持正则表达式作为参数。如果你想使用正则表达式,可以试试re.split()
:
>>> import re
>>> re.split(r"\s+", "a b")
['a', 'b']
10
因为 \t
代表的是字符串中的一个制表符(就像 \n
代表换行符一样,详细信息可以查看有效转义序列的列表),而 \s
是一个特殊的正则表达式字符类,用来表示空白字符。
str.split
[文档] 不支持正则表达式。如果你想用正则表达式来分割字符串,就得使用re.split
[文档]。
示例:
>>> 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']