You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

构建简易方程求解器:正则提取整数与变量元素遇阻求助

解决方程元素分离的正则问题

嘿,我来帮你搞定这个方程元素分离的麻烦!你的思路是对的——用正则来区分变量项和整数项,但当前的正则表达式确实有几个小问题,咱们一步步修正它。

先分析你现有代码的问题

你的正则r"([+-]+(\d+)+[x])"存在这些问题:

  • 多余的重复符号:(\d+)+里的+完全没必要,反而会让正则引擎重复捕获数字组,导致findall返回的是元组而不是完整的项;
  • 没考虑系数为1的情况:比如预处理后的+x(原字符串开头的x),你的正则要求必须有数字,所以匹配不到;
  • 只处理了变量项,完全没覆盖整数项的匹配;
  • 原字符串里的等号右侧内容(= 42)没去掉,后续处理可能会干扰结果。

修正后的完整解决方案

咱们先优化预处理步骤,再分别用正则匹配变量项和整数项:

import re

# 原始方程字符串
t = 'x - 3x -7x+9-2x-12 = 42'

# 第一步:去掉空格,只保留等号左边的表达式
t = t.split('=')[0].replace(' ', '')

# 第二步:给开头补正负号(如果没有的话)
if t[0] not in '+-':
    t = '+' + t

# 匹配所有变量项(比如 +x, -3x, +7x 这类)
variable_terms = re.findall(r"[+-]\d*x", t)
print("提取到的变量项:", variable_terms)

# 进一步提取变量的系数(方便后续合并同类项)
variable_coefficients = []
for term in variable_terms:
    sign = term[0]
    # 去掉符号和末尾的x,剩下系数部分
    coeff_str = term[1:-1]
    # 如果系数部分是空的(比如 +x),默认系数是1
    coeff = int(coeff_str) if coeff_str else 1
    # 加上符号
    if sign == '-':
        coeff *= -1
    variable_coefficients.append(coeff)
print("变量项的系数列表:", variable_coefficients)

# 匹配所有整数项(比如 +9, -12 这类)
integer_terms = re.findall(r"[+-]\d+", t)
# 转换为整数列表
integer_values = [int(term) for term in integer_terms]
print("提取到的整数项:", integer_values)

运行结果说明

执行上面的代码后,你会得到:

提取到的变量项: ['+x', '-3x', '-7x', '-2x']
变量项的系数列表: [1, -3, -7, -2]
提取到的整数项: ['+9', '-12']

这样就完美把变量项和整数项分开了,接下来你就可以合并变量系数、计算整数和,然后移项求解方程啦。

内容的提问来源于stack exchange,提问作者Johannes Schwaninger

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:06:21