Что ж, вы можете изменить лексер sympy (или парсер / грамматику / что угодно).
Вы также можете обернуть его функцией, которая преобразует ваши входные строки для вас, используя что-то вроде этого:
>>> import re
>>> expr = '2x + 1'
>>> re.sub(r"(\d+)(\w+)", r"(\1 * \2)", expr)
'(2 * x) + 1'
Но спросите себя, почему эта нотация не существует с самого начала.
Например, все они действительны на python, и, хотя я давно не играл с sympy, яДержу пари, что они означают что-то помимо умножения в sympy:
0x32 # hex for 50
5e-3 # 0.005
2j # 2 * sqrt(-1) (so that one *is* multiplication, but by 1j, not j!)
15L # 15 (L used to represent long integers in python)
И что означает x2
?Это переменная с именем x2
или она означает (x * 2)
.Я специально исключил этот случай из приведенного выше регулярного выражения, потому что он настолько неоднозначный.