#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
。