From: Fredrik Lundh Date: Fri, 30 Jun 2000 09:13:06 +0000 (+0000) Subject: - added support for (?P=name) X-Git-Tag: v2.0b1~1243 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=b71624e6988966b53b72f9447bbaa06e0a004eb0;p=python - added support for (?P=name) (closes #3 and #7 from the status report) --- diff --git a/Lib/sre_parse.py b/Lib/sre_parse.py index 40f2cb5edc..a6f3082a44 100644 --- a/Lib/sre_parse.py +++ b/Lib/sre_parse.py @@ -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: diff --git a/Lib/test/output/test_sre b/Lib/test/output/test_sre index 65eadf92b0..75caa55c38 100644 --- a/Lib/test/output/test_sre +++ b/Lib/test/output/test_sre @@ -1,11 +1,9 @@ test_sre test_support -- test failed re module pickle test_support -- test failed re module cPickle -=== Syntax error: ('(?Pa)(?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: ('(?Paa)(?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')