import re
import numpy as np

def parse_equation(equation):
    pattern = r'([+-]?\d*)\s*([a-zA-Z]?)'
    lhs, rhs = equation.split('=')
    rhs = int(rhs.strip())
    terms = re.findall(pattern, lhs)
    print(terms)
    coefficients = {}
    for coeff, var in terms:
        if not (coeff or var):
            continue
        print(coeff,var,sep=',',end='!')
        if coeff in {'','+'}:
            coefficients[var] = 1
        elif coeff == '-':
            coefficients[var] = -1
        else:
            coefficients[var] = int(coeff)
        print(coeff, coefficients[var],sep=',',end="$")
    return coefficients, rhs

def convert_to_matrix(equations):
    variables = set()
    for eq in equations:
        coefficients, _ = parse_equation(eq)
        variables.update(coefficients.keys())
    variables = sorted(variables)
    A = []
    b = []
    for eq in equations:
        coefficients, rhs = parse_equation(eq)
        row = [coefficients.get(var, 0) for var in variables]
        A.append(row)
        b.append(rhs)
    return np.array(A), np.array(b), variables

equations = [
    "-x+y+z=12345",
    "x-y+z=1234",
    "x+y-z=123"
]
print("\n".join(equations))
print()
A, b, v = convert_to_matrix(equations)
print(A, b, v, s:=np.linalg.solve(A,b),sep="")
print()
for var,val in zip(v,s):
    print(var,'=',val)