]> granicus.if.org Git - python/commitdiff
- added support for (?P=name)
authorFredrik Lundh <fredrik@pythonware.com>
Fri, 30 Jun 2000 09:13:06 +0000 (09:13 +0000)
committerFredrik Lundh <fredrik@pythonware.com>
Fri, 30 Jun 2000 09:13:06 +0000 (09:13 +0000)
  (closes #3 and #7 from the status report)

Lib/sre_parse.py
Lib/test/output/test_sre

index 40f2cb5edcd14ef322aa21bf215b3f895e9bda96..a6f3082a44ae144d99f3f848356b9bab66861529 100644 (file)
@@ -189,9 +189,9 @@ def isname(name):
 def _group(escape, groups):
     # check if the escape string represents a valid group
     try:
-        group = int(escape[1:])
-        if group and group < groups:
-            return group
+        gid = int(escape[1:])
+        if gid and gid < groups:
+            return gid
     except ValueError:
         pass
     return None # not a valid group
@@ -442,7 +442,20 @@ def _parse(source, state, flags=0):
                             raise error, "illegal character in group name"
                     elif source.match("="):
                         # named backreference
-                        raise error, "not yet implemented"
+                        name = ""
+                        while 1:
+                            char = source.get()
+                            if char is None:
+                                raise error, "unterminated name"
+                            if char == ")":
+                                break
+                            name = name + char
+                        if not isname(name):
+                            raise error, "illegal character in group name"
+                        gid = state.groupdict.get(name)
+                        if gid is None:
+                            raise error, "unknown group name"
+                        subpattern.append((GROUP, gid))
                     else:
                         char = source.get()
                         if char is None:
index 65eadf92b0ddfb56607d3698798325968e296740..75caa55c380a82ba0864302fd940d91a42e59933 100644 (file)
@@ -1,11 +1,9 @@
 test_sre
 test_support -- test failed re module pickle
 test_support -- test failed re module cPickle
-=== Syntax error: ('(?P<foo_123>a)(?P=foo_123)', 'aa', 0, 'g1', 'a')
 === Failed incorrectly ('^(.+)?B', 'AB', 0, 'g1', 'A')
 === Failed incorrectly ('(a+)+\\1', 'aa', 0, 'found+"-"+g1', 'aa-a')
 === grouping error ('([^/]*/)*sub1/', 'd:msgs/tdir/sub1/trial/away.cpp', 0, 'found+"-"+g1', 'd:msgs/tdir/sub1/-tdir/') 'd:msgs/tdir/sub1/-trial/' should be 'd:msgs/tdir/sub1/-tdir/'
-=== Syntax error: ('(?P<id>aa)(?P=id)', 'aaaa', 0, 'found+"-"+id', 'aaaa-aa')
 === grouping error ('([abc])*bcd', 'abcd', 0, 'found+"-"+g1', 'abcd-a') 'abcd-c' should be 'abcd-a'
 === grouping error ('(?i)([abc])*bcd', 'ABCD', 0, 'found+"-"+g1', 'ABCD-A') 'ABCD-C' should be 'ABCD-A'
 === Syntax error: ('a(?!b).', 'abad', 0, 'found', 'ad')