]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
[Bug #1177831] Fix (?(id)yes|no) for a group other than the first one, and add a...
authorAndrew M. Kuchling <amk@amk.ca>
Thu, 2 Jun 2005 13:40:12 +0000 (13:40 +0000)
committerAndrew M. Kuchling <amk@amk.ca>
Thu, 2 Jun 2005 13:40:12 +0000 (13:40 +0000)
Lib/sre_compile.py
Lib/test/test_re.py

index 27ab1fe7482a0c2fc9046cc0cb392d008d509d6b..af06d881a8984ae268107a4d9343443ba9d3e276 100644 (file)
@@ -156,7 +156,7 @@ def _compile(code, pattern, flags):
             emit(av-1)
         elif op is GROUPREF_EXISTS:
             emit(OPCODES[op])
-            emit((av[0]-1)*2)
+            emit(av[0]-1)
             skipyes = _len(code); emit(0)
             _compile(code, av[1], flags)
             if av[2]:
index 07bc63b277a76568ef34f303f549ec4d0d12aa9d..c86f502c50d483ded3a456abbb57e46b6325506b 100644 (file)
@@ -235,6 +235,16 @@ class ReTests(unittest.TestCase):
         self.assertEqual(re.match('^(?:(a)|c)((?(1)|d))$', 'a').groups(),
                          ('a', ''))
 
+       # Tests for bug #1177831: exercise groups other than the first group
+       p = re.compile('(?P<g1>a)(?P<g2>b)?((?(g2)c|d))')
+       self.assertEqual(p.match('abc').groups(),
+                        ('a', 'b', 'c'))
+       self.assertEqual(p.match('ad').groups(),
+                        ('a', None, 'd'))
+       self.assertEqual(p.match('abd'), None)
+       self.assertEqual(p.match('ac'), None)
+       
+
     def test_re_groupref(self):
         self.assertEqual(re.match(r'^(\|)?([^()]+)\1$', '|a|').groups(),
                          ('|', 'a'))