Well, since the "55" is required if the "402" is present, then the branch that matches "402" also needs to match "55".
There has to be a "4" or a "9", followed by a hyphen, followed by four digits.
[49]-\d{4}
There MIGHT be a "55" before that:
(55)?[49]-\d{4}
And if there is, there MIGHT be a "402-" before it.
((402-)?55)?[49]-\d{4}
Conversely, the number starts with "402-":
402-
but it's optional:
(402-)?
Whether it's present or not, the next two characters are "55"
(402-)?55
But that whole thing is still optional:
((402-)?55)?
Whether it's there or not, it then MUST be followed by a "4" or a "9", etc....:
((402-)?55)?[49]-\d{4}
And to allow hyphens, spaces, or nothing as separator, replace "-" with "[- ]?" This then happens to allow "402-5543005". Tolerable?
Warning: too tired to test