Python 2, 6262 61 bytes
lambda s,L=1:eval(re.sub('(\d*)(.)',r'+\1L*"\2"'r'+1*\1*1*"\2"',s)) import re The regex substitution expands 3<2+- into the string:
+3L*"<"+2L*"+"+L*"+1*3*1*"<"+1*2*1*"+"+1**1*"-" which is then evaled. (Note how when 3L\1 is parsed as a long integer literalempty, whereaswe get L1**1 = 1 is parsed as a variable, which we defined as 1. Note how the) The first + is a unary operator which binds to the first number, and the other +s are string concatenation!. This beats the more obvious
lambda s:re.sub('(\d+)(.)',lambda m:int(m.group(1))*m.group(2),s) import re by 1314 bytes. Ordinarily "\2" wouldn’t always work, but thankfully \ and " aren’t brainfuck commands.
xnor saved a byte, supplying the 1*\1*1 trick. Previously I had \1L in the regex, and defined L=1 as a lambda argument, which is also pretty cool: 3L is a long int literal and L is a variable.