问题描述
我有一个格式的字符串
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)