为什么line.split('\s')和line.split()不一样?

1 投票
3 回答
21498 浏览
提问于 2025-04-16 12:57

我有一个非常简单的程序,它可以解析一个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']   

撰写回答