New submission from andrew cooke <and...@acooke.org>: from re import compile
# these work as expected assert compile('(a)b(?<=b)(c)').match('abc') assert not compile('(a)b(?<=c)(c)').match('abc') assert compile('(a)b(?=c)(c)').match('abc') assert not compile('(a)b(?=b)(c)').match('abc') # but when you add groups, you get bugs assert not compile('(?:(a)|(x))b(?<=(?(2)x|c))c').match('abc') # matches! assert not compile('(?:(a)|(x))b(?<=(?(2)b|x))c').match('abc') assert compile('(?:(a)|(x))b(?<=(?(2)x|b))c').match('abc') # fails! assert not compile('(?:(a)|(x))b(?<=(?(1)c|x))c').match('abc') # matches! assert compile('(?:(a)|(x))b(?<=(?(1)b|x))c').match('abc') # fails! # but lookahead works as expected assert compile('(?:(a)|(x))b(?=(?(2)x|c))c').match('abc') assert not compile('(?:(a)|(x))b(?=(?(2)c|x))c').match('abc') assert compile('(?:(a)|(x))b(?=(?(2)x|c))c').match('abc') assert not compile('(?:(a)|(x))b(?=(?(1)b|x))c').match('abc') assert compile('(?:(a)|(x))b(?=(?(1)c|x))c').match('abc') # these are similar but, in my opinion, shouldn't even compile # (group used before defined) assert not compile('(a)b(?<=(?(2)x|c))(c)').match('abc') # matches! assert not compile('(a)b(?<=(?(2)b|x))(c)').match('abc') assert not compile('(a)b(?<=(?(1)c|x))(c)').match('abc') # matches! assert compile('(a)b(?<=(?(1)b|x))(c)').match('abc') # fails! assert compile('(a)b(?=(?(2)x|c))(c)').match('abc') assert not compile('(a)b(?=(?(2)b|x))(c)').match('abc') assert compile('(a)b(?=(?(1)c|x))(c)').match('abc') # this is the error we should see above try: compile('(a)\\2(b)') assert False, 'expected error' except: pass ---------- components: Library (Lib) messages: 109382 nosy: acooke priority: normal severity: normal status: open title: Lookback with group references incorrect (two issues?) type: behavior versions: Python 2.6 _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue9179> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com