re.split(" ", string) 和 re.split("\s+", string) 的区别?

Sih*_*Lee 4 python split python-re

我目前正在研究正则表达式并遇到了一个查询。所以问题的标题是我想要找出的。我认为因为\s代表一个空白,re.split(" ", string)并且re.split("\s+", string)会给出相同的值,如下所示:

>>> import re
>>> a = re.split(" ", "Why is this wrong")
>>> a
["Why", "is", "this", "wrong"]
Run Code Online (Sandbox Code Playgroud)
>>> import re
>>> a = re.split("\s+", "Why is this wrong")
>>> a
["Why", "is", "this", "wrong"]
Run Code Online (Sandbox Code Playgroud)

这两个给出了相同的答案,所以我认为它们是同一回事。然而,事实证明这些是不同的。在什么情况下会有所不同?我在这里错过了什么让我失明?

Pat*_*ner 10

根据您的示例,这看起来很相似。

' '(单个空格)上进行拆分就是这样做的 - 它在单个空格上拆分。拆分时,连续的空格将导致空的“匹配项”。

拆分'\s+'也将拆分这些字符的多次出现,它包括其他空格,然后是“纯空格”:

import re

a = re.split(" ", "Why    is this  \t \t  wrong")
b = re.split("\s+", "Why    is this  \t \t  wrong")

print(a)
print(b)
Run Code Online (Sandbox Code Playgroud)

输出:

# re.split(" ",data)
['Why', '', '', '', 'is', 'this', '', '\t', '\t', '', 'wrong']

# re.split("\s+",data)
['Why', 'is', 'this', 'wrong']
Run Code Online (Sandbox Code Playgroud)

文档:

\s
匹配任何空白字符;这相当于类[ \t\n\r\f\v]。(https://docs.python.org/3/howto/regex.html#matching-characters