为什么python3.7通过re.split()返回与python3.6(anaconda)不同的输出?

时间:2018-08-23 22:20:30

标签: python python-3.x anaconda

#test.py
import re

tmp = {'value': 'V-4056366 ', 'bool': False}
def get_split():
    value = str(tmp['value']).strip()
    if value=='':
        return None
    if value.isalnum(): 
        return None
    return re.split(r'[-.]*',value)

print(get_split())

如果我使用预安装的python 3.7运行以上代码,则会得到以下输出(我真正想要的 output )。

[pc@pc-pc PasivicSoftware]$ python3.7 test.py
['', 'V', '', '4', '0', '5', '6', '3', '6', '6', '']
[pc@pc-pc PasivicSoftware]$ which python3.7
/bin/python3.7

现在有了anaconda 3.6.5:

[pc@pc-pc PasivicSoftware]$ python3 test.py
/home/pc/anaconda3/lib/python3.6/re.py:212: FutureWarning: split() requires a non-empty pattern match.
  return _compile(pattern, flags).split(string, maxsplit)
['V', '4056366'][pc@pc-pc PasivicSoftware]
$ which python3
/home/pc/anaconda3/bin/python3

python3.7是否更改了re.split的行为?如果是这样,我如何获得相同的anaconda输出(列表中仅两个元素)

1 个答案:

答案 0 :(得分:1)

在3.6中,您会得到警告,即将发生这种情况:

  

FutureWarning:split()需要非空模式匹配。

由于[-]*可以匹配零长度字符串,因此它在3.7中可以做到。您可以通过使用其他方法来避免这种情况。 --+都可以(取决于您想对V--12345进行的操作。

如果您不关心连续的-符号,甚至可以改用value.split('-'),而不需要re