如何拆分由包含短划线的变量组成的数学公式

时间:2016-07-27 19:49:15

标签: python regex split

尝试拆分此行:

formula='%abc-def%+%hij-klm%/%opq+rst%-%uvw-xyz%

变量包含"%"符号,必须保持不变。

我希望在+-/*上拆分,而不会因名称中的'-'而拆分变量。

是否有一种简单的方法,而不必使用for循环扫描每个字符?

第一道:

拆分变量(不好):

re.compile("[\+\/\-\*]").split(formula) 

['%abc', 'def%', '%hij', 'klm%', '%opq', 'rst%', '%uvw', 'xyz%']

第二路:

失去%(不好):

re.compile("%[\+\/\-\*]%").split(formula) 

['%abc-def', 'hij-klm', 'opq+rst', 'uvw-xyz%']

预期输出:

我正在寻找能够收获的东西:

['%abc-def%', '%hij-klm%', '%opq+rst%', '%uvw-xyz%']

谢谢, 丹

2 个答案:

答案 0 :(得分:0)

您可以通过使用外观来阻止re.compile("%[\+\/\-\*]%").split(formula)删除%个字符:

re.compile(r"(?<=%)[+/*-](?=%)").split(formula)

另一个解决方案是在[+/*-]上进行拆分,但前提是后跟偶数个%字符:

re.split(r'[+*/-](?=(?:(?:[^%]*%){2})*$)', formula)

答案 1 :(得分:0)

两步解决方案:

import re

tempList = re.split("(\-|\+|\/|\*)(?=%)",'%abc-def%+%hij-klm%/%opq+rst%-%uvw-xyz%')

finalList = [x for x in tempList if "%" in x]

['%abc-def%', '%hij-klm%', '%opq+rst%', '%uvw-xyz%']

我希望这会有所帮助。