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

问题描述

我有一个格式的字符串 exp = '(( 200 + (4 * 3.14)) / ( 2 ** 3 ))'

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

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

我的输出错误):

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

我想问一下有没有办法在 *** 之间分割分隔符?非常感谢!

期望的输出

['(','**',')']

解决方法

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

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

甚至更短:

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