I have i finite-state machine.
My regular expression is: \+[0-9]+\+%\+[0-9]+
The problem is that q3 is is in excessive state (the same as q1) I am wondering how to bypass that.
Should I simply rename q3 to q1 or what?
Thanks.

EOS – end of string.
If you don’t remember RegX.
It is basically means that accepted string will be: "+[0-9]([0-9] any amount of times, but at least one.)+%+[0-9]"([0-9] any amount of times, but at least one)
UPD1 new FSM, question the same: q4 is the same as q2 how to overcome that?
There really isn’t a problem here. You write that q₄ “is the same as” q₂, but that’s not true: only one of them leads to q₃ if you give it
+%+, and only one of them leads to q₅ if you give it end-of-string. Therefore, they have to be represented by separate internal states.