替换部分表达式

时间:2017-12-28 20:35:42

标签: python regex sympy

假设我有一个像这样的表情:

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)并将C2H4HO替换为c(sC2H4)c(sH)或{{ 1}}分别。

我正在尝试使用正则表达式,但c(sO)需要re.sub,但它们都是str个对象,这使得事情变得复杂!!!

1 个答案:

答案 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'。