PHP, 206213 Bytes
$p=0;for($i=count($a=array_reverse(explode(',',trim($argv[1],'[]'))))-1;$i>=0;$i--)if(($b=(float)$a[$i])||(!$i&&!$p)){$k=abs($b);echo ($b<0?'-':($p?'+':'')).((($k!=1)||!$i)?$k:'').($i>1?'x^'.$i:($i?'x':''));$p=1;}
Command line argument as requested by OP (single argument with brackets and commas).
Pretty print and some explanation:
$p = false; /* No part of the polynomial has yet been printed. */
for ($i = count($a = array_reverse(explode(',',trim($argv[1],'[]')))) - 1; $i >= 0; $i--)
{
$b = (float)$a[$i]; /* Cast to float to avoid -0 and numbers like 1.0 */
if (($b != 0) or (($i == 0) and !$p)) /* Print, if $b != 0 or the constant if there is no part until here. */
{
$k = abs($b);
echo ($b < 0 ? '-' : ( $p ? '+' : '')); /* Sign. The first sign is suppressed (if $p is false) if $b positive. */
echo ((($k != 1) || ($i == 0)) ? $k : ''); /* Coefficient */
echo ($i > 1 ? 'x^' . $i : (($i != 0) ? 'x' : '')); /* x^3, x^2, x, constant with empty string. */
$p = true; /* Part of the polynomial has been printed. */
}
}