Python 2 与 3 正则表达式的区别

dgu*_*uan 5 python regex python-2.7 python-3.x

我有一个在 Python 2 中完美运行的正则表达式:

parts = re.split(r'\s*', re.sub(r'^\s+|\s*$', '', expression)) # split expression into 5 parts
Run Code Online (Sandbox Code Playgroud)

这个正则表达式将一个表达式分成 5 个部分,例如,

'a * b   =     c' will be split into ['a', '*', 'b', '=', 'c'],
'11 + 12 = 23' will be split into ['11', '+', '12', '=', '23'],
'ab   - c = d' will be split into ['ab', '-', 'c', '=', 'd'],
Run Code Online (Sandbox Code Playgroud)

等等。

但是在 Python 3 中,这个正则表达式的工作方式完全不同,

'a * b   =     c' will be split into ['', 'a','', '*', '', 'b','', '=', '',  'c', ''],
'11 + 12 = 23' will be split into ['', '1', '1', '', '+', '', '1', '2', '', '=', '', '2', '3', ''],
'ab   - c = d' will be split into ['', 'a', 'b', '', '-', '', 'c', '', '=', '', 'd', ''],
Run Code Online (Sandbox Code Playgroud)

一般来说,在 Python 3 中,part 中的每个字符都会被拆分成一个单独的部分,删除的空格(包括不存在的前导和尾随)将成为一个空的 part('') 并添加到 part 列表中。

我认为这个 Python 3 regex 行为与 Python 2 有很大不同,谁能告诉我 Python 3 会改变这么多的原因,以及像 Python 2 一样将表达式分成 5 部分的正确正则表达式是什么?