Python 为什么';t line.split(';\s';)执行与line.split()相同的操作?
我有一个非常简单的程序,可以解析一个csv文件,该文件包含一行文本记录,这些记录的列由单个制表符分隔 我理解split()默认情况下是对空白进行拆分的,因此不需要显式指定空白模式,但我的问题是,为什么显式指定的空白模式不起作用?或者'\s'或r'\s'不是正确的模式/正则表达式?我在stackoverflow上搜索了一下,发现string split()是一个比较老的方法,我不太理解,因为我对python非常陌生。string split()不支持正则表达式吗 这是我的密码:Python 为什么';t line.split(';\s';)执行与line.split()相同的操作?,python,split,Python,Split,我有一个非常简单的程序,可以解析一个csv文件,该文件包含一行文本记录,这些记录的列由单个制表符分隔 我理解split()默认情况下是对空白进行拆分的,因此不需要显式指定空白模式,但我的问题是,为什么显式指定的空白模式不起作用?或者'\s'或r'\s'不是正确的模式/正则表达式?我在stackoverflow上搜索了一下,发现string split()是一个比较老的方法,我不太理解,因为我对python非常陌生。string split()不支持正则表达式吗 这是我的密码: #!/usr/bi
#!/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')起作用。因为
\t
实际上代表字符串中的制表符(比如\n
是新的行字符,请参见这里的a),但是\s
是一个特殊的正则表达式字符类,用于空格
不接受正则表达式。如果要使用正则表达式拆分,则必须使用
演示:
>>> 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']
因为
\t
实际上表示字符串中的制表符(比如\n
是新行字符,请参见此处的a),但是\s
是一个特殊的正则表达式字符类,用于空格
不接受正则表达式。如果要使用正则表达式拆分,则必须使用
演示:
>>> 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']
string.split()
将字符串作为参数,并基于该字符串进行拆分。就这些\t
是ASCII制表符,而在本例中,\s
只是\
+s
对于正则表达式拆分,您需要导入re
并使用re.split()
string.split()
将字符串作为参数,并基于该字符串进行拆分。就这些\t
是ASCII制表符,而在本例中,\s
只是\
+s
对于正则表达式拆分,您希望导入re
并使用re.split()
函数string.split()
不接受正则表达式参数。尝试:
string.split()
函数不接受正则表达式参数。尝试:
Felix,那么字符串拆分与正则表达式拆分不同?我对python不熟悉,因此产生了困惑。@软件工程师:是的,正常的
拆分按字面意思处理字符。由于\s
不是特殊字符(如\t
是),它将尝试在\s
处拆分字符串。是的,re.split和str.split是不同的。两者的文档都可以在这里找到:,Felix,所以字符串拆分不同于正则表达式拆分?我对python不熟悉,因此产生了困惑。@软件工程师:是的,正常的拆分按字面意思处理字符。由于\s
不是特殊字符(如\t
是),它将尝试在\s
处拆分字符串。是的,re.split和str.split是不同的。两者的文档可在此处找到:,