While
parser._negative_number_matcher
is used during parser.parse_args() to check whether an argument string is a 'negative number' (and hence whether to classify it as A or O).
parser._optionals._negative_number_matcher
is used during parser.add_argument() to determine whether an option_string is a 'negative number', and hence whether to modify the _hasNegativeNumberOptionals flag. If this matcher is the general r'^-.+$', adding the default '-h' will set this flag. We don't want that.
Using a different matcher for these two containers might work, but is awfully kludgy.