Uiua
Uses experimental feature of fold to track the running state of do/don't.
[edit] Slightly re-written to make it less painful :-) Try it online!
# Experimental!
DataP₁ ← $ xmul(2,4)%&mul[3,7]!@^do_not_mul(5,5)+mul(32,64]then(mul(11,8)mul(8,5))
DataP₂ ← $ xmul(2,4)&mul[3,7]!^don't()_mul(5,5)+mul(32,64](mul(11,8)undo()?mul(8,5))
GetMul ← $ mul\((\d{1,3}),(\d{1,3})\)
GetMulDoDont ← $ mul\(\d{1,3},\d{1,3}\)|do\(\)|don\'t\(\)
&p/+≡(/×≡⋕↘1)regexGetMul DataP₁ # Part 1
# Build an accumulator to track running state of do/don't
Filter ← ↘1⊂:∧(⍣(0 °"don"|1 °"do("|.◌)) :1≡(↙3°□)
≡⊢ regex GetMulDoDont DataP₂
▽⊸≡◇(≍"mul"↙3)▽⊸Filter # Apply Filter, remove the spare 'do's
&p/+≡◇(/×≡◇⋕↘1⊢regexGetMul) # Get the digits and multiply, sum.