假设我有一个像这样的表情:
x = ( 1+ r70f * C2H4 *H+ r71* O)
其中r70f, C2H4, H , r71, O
是同情变量。我希望它将其更改为以下表达式:
x = ( 1+ k(r70f) * c(sC2H4) *c(sH)+ k(r71)* c(sO))
基本上将r_SomeNumber_f
替换为k(r_SomeNumber_f)
并将C2H4
或H
或O
替换为c(sC2H4)
或c(sH)
或{{ 1}}分别。
我正在尝试使用正则表达式,但c(sO)
需要re.sub
,但它们都是str
个对象,这使得事情变得复杂!!!
答案 0 :(得分:1)
我演示了两种方法:一种是带符号技巧,另一种带有包装函数:
>>> ns={}
>>> ns["O"] = Symbol("O")
>>> x = S('1+ r70f * C2H4 *H+ r71* O', locals=ns)
>>> # Symbol trickery -- changing the name to have parens in it
>>> print(x.replace(
... lambda x: re.match('r[0-9]+f', str(x)),
... lambda x: Symbol('k(%s)' % str(x))))
...
C2H4*H*k(r70f) + O*r71 + 1
# function wrapper
>>> k=Function('k')
>>> print(x.replace(lambda x: re.match('r[0-9]+f', str(x)), lambda x:k(x)))
C2H4*H*k(r70f) + O*r71 + 1
注意:您说您正在寻找k_number_f,但r71的情况并非以' f'所以它没有改变。
我将剩下的其他内容转换为' c-function'。