Set operandRegex as constexpr. It does not benefit from being a std::string and can simply be a const char *. Refer to the constructor for regex.
operatorRegexMap may also be constexpr as of C++26.
re should not be constructed on the inside of the loop. It should be constructed outside of the loop, either in function scope or as a const global. This applies to both token pattern kinds.
For Operator use enum classenum class instead of enum.
The logic of tokenize does not seem correct to me. It tries, in a stateless manner, to match either an operand or an operator on any token. Instead, you should alternate between matching an operand and matching an operator, assuming that all operators are binary. If you also need to support unary operators, you need at leastexactly one binary operator between operands, and zero or more unary operators before each operand.
Since your module doesn't export anything, all global symbols other than main() should be in an anonymous namespace { }. It's a long story, but I find it less repetitive than declaring static on everything.