我正在使用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))
有什么办法可以解决这个问题?我尝试了否定前瞻,但仍然无法正常工作
没什么好说的,但是您遇到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] 删除。
我来说两句