如果没有给出分隔符,python是否会使用正则表达式拆分?
我无法查看str.__file__
,此处的other solutions work也不会,因为split
是str
类型的函数(尽管它是内置的) )。
E.g。 'a\t\t\tb' --> ['a', 'b']
背景
我正在考虑用性能至关重要的许多文件用一个空格替换所有相邻的空格,尽管我想知道正则表达式拆分是否足够快:或许内置显示更好的方法。
答案 0 :(得分:0)
首先,str
内置于python中,这意味着要查看str.split
的来源,您将需要深入研究C source code它被定义了。
现在,谈谈你的实际问题。我觉得re.sub
不仅会过度使用,而且比使用内置的str.split慢(完全披露:我没有时间数据来支持它 - 它&# 39;我只是一种感觉。
现在,str.split
默认情况下在空白处拆分(它需要一个可选参数,可用于指定要拆分的字符)。它还会分割任意数量的连续空白字符。现在,这意味着如果你有一个包含空格字符的字符串,在该字符串上调用str.split
将返回一个非空子串列表,其中没有任何空格包含任何空格。因此,如果您的字符串具有异构的连续空白字符,那么这些空格字符的处理方式就不会相同。
以下是几个例子:
In [31]: s = 'hello world' # one space
In [32]: s.split()
Out[32]: ['hello', 'world']
In [33]: s = 'hello \tworld' # multiple consecutive whitespace characters
In [34]: s.split()
Out[34]: ['hello', 'world']
In [35]: s = 'hello\tworld' # a different whitespace character
In [36]: s.split()
Out[36]: ['hello', 'world']
In [37]: s = 'hello\t\tworld' # multiple consecutive tab characters
In [38]: s.split()
Out[38]: ['hello', 'world']
In [39]: s = 'hello world' # multiple consecutive space characters
In [40]: s.split()
Out[40]: ['hello', 'world']
正如你所看到的,你的空间如何存在并不重要 - 想想str.split
何时分裂"至少有一个空白字符"出现。
现在,如果您想用一个空格替换所有连续的空白字符,可以使用str.split
和str.join
来执行此操作:
In [41]: ' '.join(['hello', 'world']) # join the strings 'hello' and 'world' with a space between them
Out[41]: 'hello world'
In [42]: s = 'hello world' # notice two spaces between 'hello' and 'world'
In [43]: ' '.join(s.split())
Out[43]: 'hello world' # notice only one space between 'hello' and 'world'
答案 1 :(得分:0)
它不使用正则表达式,它使用<wctypes.h>
&#39; s iswspace(...)
我们在这里可以看到它使用宏STRINGLIB_ISSPACE(...) https://github.com/certik/python-3.3/blob/master/Objects/stringlib/split.h
这里定义为wctypes.h&#39; s iswspace:http://svn.python.org/projects/python/trunk/Include/unicodeobject.h