正则表达式拆分:FutureWarning:split()需要非空模式匹配

时间:2017-11-30 01:58:56

标签: regex python-3.x split

当我使用split()命令时,我在Python 3版本中收到警告,如下所示:

pattern = re.compile(r'\s*')
match = re.split(pattern, 'I am going to school')
print(match)
  

python3.6 / re.py:212:FutureWarning:split()   需要非空模式匹配。 return _compile(pattern,   flags).split(string,maxsplit)

我不明白为什么我会收到此警告。

1 个答案:

答案 0 :(得分:16)

您收到此警告是因为您要求在零或更多空格的子字符串上分割\s*模式

但是......空字符串匹配该模式,因为其中只有空格!

目前还不清楚re.split应该做些什么。这就是str.split的作用:

>>> 'hello world'.split('')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: empty separator
>>>

re.split决定抛弃那个空子字符串选项,而是拆分一个或多个空格。在python3.6中,它会发出你正在看到的FutureWarning,告诉你这个决定。

您可以将*替换为+

来表明这一点
$ python3.6 -c "import re; print(re.split('\s*', 'I am going to school'))"
/usr/lib64/python3.6/re.py:212: FutureWarning: split() requires a non-empty pattern match.
  return _compile(pattern, flags).split(string, maxsplit)
['I', 'am', 'going', 'to', 'school']

$ python3.6 -c "import re; print(re.split('\s+', 'I am going to school'))"
['I', 'am', 'going', 'to', 'school']