Python正则表达式从内部匹配开始

SmzAmir:

我正在使用Python中的正则表达式进行工作,该正则表达式将数学表达式转换为Sympy语言pow(x,y)的幂格式例如,它接受2^3并返回pow(2,3)

我当前的模式是:

# pattern
pattern = re.compile(r'(.+?)\^(.*)')

为了找到嵌套表达式的数学运算,我使用了一个for循环来计算^(hat)的数量,然后使用re.sub生成幂格式:

# length of the for loop
num_hat = len(re.findall(r'\^', exp))

# for nested pow
for i in range(num_hat): 
   exp = re.sub(pattern, r'pow(\1,\2)', exp)
return exp

此方法不适用于嵌套^表达式,例如,a^b^c^d或者sin(x^2)^3最终括号的位置不正确。

对于a^b^c^d它的回报pow(pow(pow(a,b,c,d)))

对于sin(x^2)^3它的回报pow(pow(sin(x,2),3))

有什么办法可以解决这个问题?我尝试了否定前瞻,但仍然无法正常工作

Wrzlprmft:

没什么好说的,但是您遇到XY问题的极端情况您显然想要的是将一些数学表达式转换为SymPy。编写自己的正则表达式似乎很繁琐,容易出错,并且可能是不可能的方法。

作为一个庞大的符号库,SymPy带有一个完整的解析子模块,该模块可让您详细调整解析表达式,特别是convert_xor控制^字符发生的事情但是,由于^默认是转换为幂运算,因此您似乎不需要执行任何操作因此,您可以简单地执行以下操作:

from sympy import sympify
print( sympy.sympify("a^b^c^d") )    # a**(b**(c**d))
print( sympy.sympify("sin(x^2)^3") ) # sin(x**2)**3

请注意,这**等效于pow,因此我不确定您为什么坚持使用后者。如果您需要可以在另一种编程语言中使用的输出,那么这就是打印模块的用途,而您自己进行更改也相当容易。可以帮助您获得所需表格的另一件事是sympy.srepr

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章