Your regular expression has two errors:
It misses a (literal) dot after
find requires you to escape the parentheses when not used as literal parentheses.
Also, you should escape the dot before
sh, since it will match any character.
The fixed command now reads:
find . -regex ".*foo\(\.bar[0-9]\)?\.sh"
Error 2., by the way, is the reason why I don't like
-regex switch: Inconsistent escaping.
It works, of course, but
grep -P uses Perl Compatible Regular Expressions (PCRE), so there are more features, but less surprises and pitfalls.
Personally, I'd use:
find . | grep -P "foo(\.bar\d)?\.sh"