繁体   English   中英

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

[英]Why python3.7 returns different output than python3.6(anaconda) with re.split()?

#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 运行上面的代码,我会得到以下输出(我真正想要得到的输出)。

[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 的相同输出(列表中只有两个元素)

在 3.6 中,您会收到以下警告:

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

由于[-]*可以匹配零长度字符串,它在 3.7 中做到了。 你可以通过使用一些没有的东西来防止这种情况。 --+都可以(取决于您希望V--12345发生什么。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM