If you want to match balanced parenthesis, regex is not the right tool for the job. Some regex implementations do facilitate recursive pattern matching (PHP and Perl, that I know of), but AFAIK, C# cannot do that (EDIT: see Steve's comment below: .NET can do this as well, after all).
You can match up to a certain depth using regex, but that very quickly explodes in your face. For example, this:
\(([^()]|\([^()]*\))*\)
meaning
\( # match the character '('
( # start capture group 1
[^()] # match any character from the set {'0x00'..''', '*'..'ÿ'}
| # OR
\( # match the character '('
[^()]* # match any character from the set {'0x00'..''', '*'..'ÿ'} and repeat it zero or more times
\) # match the character ')'
)* # end capture group 1 and repeat it zero or more times
\) # match the character ')'
will match single nested parenthesis like (a (c b 7))
and (a (x) b (y) c (z) d)
, but will fail to match (a(b(c)))
.