With no examples to try with, I can only suggest the following but it is untested.
Also, I *ASSUME* that you are using the .NET regex, based on the syntax you have used for the named character match groups. In the posting guidelines in the sticky note at the beginning of this forum we ask that you provide us with certain information so that we can try to help you better.
The general way to provide alternative patterns is to use the '|' operator. In you case and using pseudo-code, this may look something like
(text | text\(numbers\) ) ?
where the '\(' and '\)' represent literal opening and closing parentheses (parentheses have a special meaning in a regex pattern). Depending on how you specify "text" - in what follows I am assuming upper and lower case alphabetic characters with no whitespace etc - the this may be represented in a pattern as
(\w+|\w+\(d+\))?
If you apply a little logic to this, you can factor out the leading parts of the alternation to become
(\w+(|\(\d+\)))?
Now an alternation that has a null alternative can be written using the '?' quantifier (which means "match 0 or 1 time, matching as many as possible") to become
(\w+(\(\d+\))?)?
Adding in the matching group label, it would be
(?<Left>\w+(\(\d+\))?)?
Sorry that this is rather long-winded but I hope you can see how to take your "rules", build them up to an initial pattern and them apply some logic to them to come up with the final pattern.
Susan