Issue #28409: regrtest: fix the parser of command line arguments.
diff --git a/Lib/test/regrtest.py b/Lib/test/regrtest.py
index f1892ac..f870854 100755
--- a/Lib/test/regrtest.py
+++ b/Lib/test/regrtest.py
@@ -325,9 +325,6 @@
     group.add_argument('-P', '--pgo', dest='pgo', action='store_true',
                        help='enable Profile Guided Optimization training')
 
-    parser.add_argument('args', nargs='*',
-                        help=argparse.SUPPRESS)
-
     return parser
 
 def relative_filename(string):
@@ -373,7 +370,13 @@
         ns.use_resources = []
 
     parser = _create_parser()
-    parser.parse_args(args=args, namespace=ns)
+    # Issue #14191: argparse doesn't support "intermixed" positional and
+    # optional arguments. Use parse_known_args() as workaround.
+    ns.args = parser.parse_known_args(args=args, namespace=ns)[1]
+    for arg in ns.args:
+        if arg.startswith('-'):
+            parser.error("unrecognized arguments: %s" % arg)
+            sys.exit(1)
 
     if ns.single and ns.fromfile:
         parser.error("-s and -f don't go together!")
diff --git a/Lib/test/test_regrtest.py b/Lib/test/test_regrtest.py
index a398a4f..ae18327 100644
--- a/Lib/test/test_regrtest.py
+++ b/Lib/test/test_regrtest.py
@@ -270,6 +270,16 @@
         self.assertEqual(ns.verbose, 0)
         self.assertEqual(ns.args, ['foo'])
 
+    def test_arg_option_arg(self):
+        ns = regrtest._parse_args(['test_unaryop', '-v', 'test_binop'])
+        self.assertEqual(ns.verbose, 1)
+        self.assertEqual(ns.args, ['test_unaryop', 'test_binop'])
+
+    def test_unknown_option(self):
+        self.checkError(['--unknown-option'],
+                        'unrecognized arguments: --unknown-option')
+
+
 
 if __name__ == '__main__':
     unittest.main()
diff --git a/Misc/NEWS b/Misc/NEWS
index fd2030a..82cf8b0 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -376,11 +376,11 @@
 - Issue #27759: Fix selectors incorrectly retain invalid file descriptors.
   Patch by Mark Williams.
 
-- Issue #28368: Refuse monitoring processes if the child watcher has 
+- Issue #28368: Refuse monitoring processes if the child watcher has
   no loop attached.
   Patch by Vincent Michel.
 
-- Issue #28369: Raise RuntimeError when transport's FD is used with 
+- Issue #28369: Raise RuntimeError when transport's FD is used with
   add_reader, add_writer, etc.
 
 - Issue #28370: Speedup asyncio.StreamReader.readexactly.
@@ -432,6 +432,8 @@
 Tests
 -----
 
+- Issue #28409: regrtest: fix the parser of command line arguments.
+
 - Issue #27787: Call gc.collect() before checking each test for "dangling
   threads", since the dangling threads are weak references.