python - 替换部分 sympy 表达式

标签 python regex sympy

假设我有这样的同情表达:

x = ( 1+ r70f * C2H4 *H+ r71* O)

哪里r70f, C2H4, H , r71, O是 sympy 变量。我希望将其更改为以下表达式:

x = ( 1+ k(r70f) * c(sC2H4) *c(sH)+ k(r71)* c(sO))

基本上替换r_SomeNumber_fk(r_SomeNumber_f)并替换C2H4HOc(sC2H4)c(sH)c(sO)分别。

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

最佳答案

我演示了两种方法来做到这一点:一种是使用符号欺骗,另一种是使用包装函数:

>>> 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”包装的其他转换作为扩展。

关于python - 替换部分 sympy 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48014040/

相关文章:

python - 检查 python int 是否太大而无法转换为 float

python - 在 iPython Notebook 中使用 matplotlib.pyplot

java - 匹配特殊字符前的字符串

python - SymPy 中任意精度的概率值

python - 使用 sympy 消除常见的子表达式

python - tensorflow from_generator() 给出错误 - 'generator` 产生无法转换为预期类型的​​元素

python - 使用 % 运算符在 python 中打印 float

java - 使用 split(regex) Java 拆分字符串时遇到问题

javascript - 正则表达式仅匹配语言字符(所有语言)?

python - 使用 mathml 将 sympy 方程式输出到单词