如何在 Python 中拆分重复的分隔符

How to split duplicated separator in Python

我有一个格式为 exp = '(( 200 + (4 * 3.14)) / ( 2 ** 3 ))'

我想使用 re.split() 将字符串分隔成标记,并包括分隔符。但是,我无法将 ** 拆分在一起,最终被 * 拆分。

这是我的代码:tokens = re.split(r'([+|-|**?|/|(|)])',exp)

我的输出(错误):

['(', '(', '200', '+', '(', '4', '*', '3.14', ')', ')', '/', '(', '2', '*', '*', '3', ')', ')']

请问有什么方法可以把***的分隔符分开吗?非常感谢!

期望的输出:

['(', '(', '200', '+', '(', '4', '*', '3.14', ')', ')', '/', '(', '2', '**', '3', ')', ')']

使用 [...] 符号只允许您指定单个字符。要获得可变大小的替代模式,您需要使用 |这些括号之外的运算符。这也意味着您需要转义正则表达式运算符,并且需要将较长的模式放在较短的模式之前(即 ** 在 * 之前)

tokens  = re.split(r'(\*\*|\*|\+|\-|/|\(|\))',exp)

甚至更短:

tokens = re.split(r'(\*\*|[*+-/()])',exp)