diff -r 688701337b1a Lib/argparse.py --- a/Lib/argparse.py Sat Sep 06 17:24:35 2014 -0400 +++ b/Lib/argparse.py Tue Sep 09 00:19:37 2014 +0800 @@ -468,7 +468,7 @@ close = r'[\])]' text = _re.sub(r'(%s) ' % open, r'\1', text) text = _re.sub(r' (%s)' % close, r'\1', text) - text = _re.sub(r'%s *%s' % (open, close), r'', text) + text = _re.sub(r'%s *%s ?' % (open, close), r'', text) text = _re.sub(r'\(([^|]*)\)', r'\1', text) text = text.strip() diff -r 688701337b1a Lib/test/test_argparse.py --- a/Lib/test/test_argparse.py Sat Sep 06 17:24:35 2014 -0400 +++ b/Lib/test/test_argparse.py Tue Sep 09 00:19:37 2014 +0800 @@ -2315,6 +2315,17 @@ ''' self.assertEqual(parser.format_help(), textwrap.dedent(expected)) + def test_wrapped_usage_suppressed_help(self): + parser = argparse.ArgumentParser() + group = parser.add_mutually_exclusive_group() + group.add_argument('--arg1', help=argparse.SUPPRESS) + parser.add_argument('--arg2') + parser.add_argument('--arg3') + parser.add_argument('--arg4') + parser.add_argument('--arg5') + parser.add_argument('--arg6') + parser.format_usage() + class MEMixin(object): def test_failures_when_not_required(self):