from sympy import *
var('x y a b z')
expr1 = x*y + x - 3 + 2*x**2 - z*x**2 + x**3
print(collect(expr1, x))
expr2=a*(2*x**2 - 1) + 4*x**3 + x*(b - 3)
print(collect(expr2, x))
#x**3 + x**2*(-z + 2) + x*(y + 1) - 3
#a*(2*x**2 - 1) + 4*x**3 + x*(b - 3)
#4*x**3+4*a*x**2+ x*(b - 3)-a

expr1は、うまくいきますが、
expr2は、うまくいきません。
よろしくお願いします。

追加情報
metropolis様
ありがとうございます。

①expandしてみました。
②Wolfram|Alphaで実行してみました。
4*x**3から、始まりませんでした。何か規則がありますか?

from sympy import *
var('x a b')
expr2=a*(2*x**2 - 1) + 4*x**3 + x*(b - 3)
print(expr2)
print(collect(expand(expr2),x))
# a*(2*x**2 - 1) + 4*x**3 + x*(b - 3)
# 2*a*x**2 - a + 4*x**3 + x*(b - 3)

(参考)Wolfram|Alpha: Computational Knowledge Engine
https://www.wolframalpha.com/input/?i=Collect%28a%2a%282%2ax%2a%2a2-1%29%2b4%2ax%2a%2a3%2bx%2a%28b-3%29%29