The question mark is indeed the cause of the malfunctioning.
By default, GREP is Greedy: the operators ?, +, and * will match as much as possible (right until the rest ofthe expression puts a stop on it). If an expression ends with one of these, it will continue matching as much as possible until the repeated expression no longer matches. A question mark changes this: after a ?, +, or * will make it match as *little* as possible.
So what happens on a string of digits, such as “abc123efg”? Using “\d+”, it will match the entire set of digits “123” — as long as possible. With the added question mark “\d+?” it will match *as little as possible* (while still being a valid expression), and so just “1” is already enough.
In the OP’s case this happens because the Repeat modifier is at the very end of the GREP expression. If there is anything in the epression *after* this Repeat modifier, such as “\d+?” (digits but with a next lowercase letter), then GREP has no other option than to match “123e”, because the shortest *possible* match MUST include all digits.