从 Python 3.6.8 升级到 Python 3.9.0,执行单元测试后,发现 re.split() 的行为发生了显着的变化,但是查看相关的文档(Changelog和re)却没有发现有什么变化。
这种变化可以用单元测试,较为精确的表示 :
number = '123'
def test_Asterisk_quantifier_with_capture_group(self):
resultList = re.split(r'(\d*)', self.number)
if platform.python_version() == '3.6.8':
self.assertEqual(resultList,['', '123', ''])
else:
self.assertEqual(resultList,['', '123', '', '', ''])
感觉这明显不符合 split 文档中对功能的描述,还有个奇怪的现象是将*
换做+
后,行为仍与 3.6.8 相同。
1
robinjin 2021-04-23 08:38:22 +08:00 1
你在 Python 3.6.8 的交互模式下执行 re.split(r'(\d*)', ‘123’) ,有提示的。
|
2
jsdtxm 2021-04-23 08:40:47 +08:00 1
在 3.7.9 中结果为['', '123', '', '', '']。
查阅文档( https://docs.python.org/zh-cn/3.8/whatsnew/3.7.html )发现有这么一行: “re.split() 现在支持基于匹配一个空字符串的模式例如 r'\b', '^$' 或 (?=-) 进行拆分。 (由 Serhiy Storchaka 在 bpo-25054 中贡献。)” 您看看是这个吗? |
3
AndyAO OP |
4
AndyAO OP 在非交换模式下运行也是有提醒的,只不过颜色不太明显,在 IDEA 上会默认着色,这个比 VSCode 强。
https://cdn.jsdelivr.net/gh/Andy-AO/GitHubPictureBed/img/20210423101302.png |