diff options
author | Guido van Rossum <guido@python.org> | 1997-07-11 20:48:25 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 1997-07-11 20:48:25 (GMT) |
commit | 8a9a4a2336c6b2254b9eeaf1d282d2a69bb8de53 (patch) | |
tree | 315c0c9cdfddd994bc5a2561acb224d65f499181 | |
parent | 035aae0f094212c51ba2c15ca64b83bddf667151 (diff) | |
download | cpython-8a9a4a2336c6b2254b9eeaf1d282d2a69bb8de53.zip cpython-8a9a4a2336c6b2254b9eeaf1d282d2a69bb8de53.tar.gz cpython-8a9a4a2336c6b2254b9eeaf1d282d2a69bb8de53.tar.bz2 |
Jeffrey's latest.
-rw-r--r-- | Lib/re.py | 121 | ||||
-rw-r--r-- | Lib/test/output/test_re | 204 |
2 files changed, 153 insertions, 172 deletions
@@ -51,13 +51,13 @@ def search(pattern, string, flags=0): return compile(pattern, flags).search(string) def sub(pattern, repl, string, count=0): - pass + return compile(pattern).sub(repl, string, count) def subn(pattern, repl, string, count=0): - pass + return compile(pattern).subn(repl, string, count) -def split(string, pattern, maxsplit=0): - pass +def split(pattern, string, maxsplit=0): + return compile(pattern).subn(string, maxsplit) # # @@ -79,21 +79,6 @@ class RegexObject: else: self.anchor = 0 self.buffer = assemble(code) - def match(self, string, pos=0): - regs = reop.match(self.buffer, - self.num_regs, - self.flags, - self.fastmap.can_be_null, - self.fastmap.fastmap(), - self.anchor, - string, - pos) - if regs is None: - return None - return MatchObject(self, - string, - pos, - regs) def search(self, string, pos=0): regs = reop.search(self.buffer, self.num_regs, @@ -109,6 +94,27 @@ class RegexObject: string, pos, regs) + def match(self, string, pos=0): + regs = reop.match(self.buffer, + self.num_regs, + self.flags, + self.fastmap.can_be_null, + self.fastmap.fastmap(), + self.anchor, + string, + pos) + if regs is None: + return None + return MatchObject(self, + string, + pos, + regs) + def sub(self, repl, string, count=0): + pass + def subn(self, repl, string, count=0): + pass + def split(self, string, maxsplit=0): + pass class MatchObject: def __init__(self, re, string, pos, regs): @@ -116,34 +122,49 @@ class MatchObject: self.string = string self.pos = pos self.regs = regs - def start(self, i): - if type(i) == type(''): + def start(self, g): + if type(g) == type(''): try: - i = self.re.groupindex[i] + g = self.re.groupindex[g] except (KeyError, TypeError): - raise IndexError - return self.regs[i][0] - def end(self, i): - if type(i) == type(''): + raise IndexError, ('group "' + g + '" is undefined') + return self.regs[g][0] + def end(self, g): + if type(g) == type(''): try: - i = self.re.groupindex[i] + g = self.re.groupindex[g] except (KeyError, TypeError): - raise IndexError - return self.regs[i][1] - def span(self, i): - if type(i) == type(''): + raise IndexError, ('group "' + g + '" is undefined') + return self.regs[g][1] + def span(self, g): + if type(g) == type(''): try: - i = self.re.groupindex[i] + g = self.re.groupindex[g] except (KeyError, TypeError): - raise IndexError - return self.regs[i] - def group(self, i): - if type(i) == type(''): - try: - i = self.re.groupindex[i] - except (KeyError, TypeError): - raise IndexError - return self.string[self.regs[i][0]:self.regs[i][1]] + raise IndexError, ('group "' + g + '" is undefined') + return self.regs[g] + def group(self, *groups): + if len(groups) == 0: + groups = range(1, self.re.num_regs) + result = [] + for g in groups: + if type(g) == type(''): + try: + g = self.re.groupindex[g] + except (KeyError, TypeError): + raise IndexError, ('group "' + g + '" is undefined') + if g >= len(self.regs): + result.append(None) + elif (self.regs[g][0] == -1) or (self.regs[g][1] == -1): + result.append(None) + else: + result.append(self.string[self.regs[g][0]:self.regs[g][1]]) + if len(result) > 1: + return tuple(result) + elif len(result) == 1: + return result[0] + else: + return () # # A set of classes to make assembly a bit easier, if a bit verbose. @@ -331,7 +352,7 @@ class SyntaxSpec(Instruction): def assemble(self, postition, labels): return self.opcode + chr(self.syntax) -class SyntaxSpec(Instruction): +class NotSyntaxSpec(Instruction): name = 'notsyntaxspec' def __init__(self, syntax): self.syntax = syntax @@ -382,13 +403,12 @@ def assemble(instructions): # def escape(pattern): - result = '' + result = [] for char in pattern: if 'word' not in syntax_table[char]: - result = result + '\\' + char - else: - result = result + char - return result + result.append('\\') + result.append(char) + return string.join(result, '') # # @@ -631,7 +651,7 @@ def compile(pattern, flags=0): expr + \ [Jump(-1), Label(label)]) - stack.append([('|',)]) + stack.append([Alternation()]) label = label + 1 elif char == '(': @@ -693,12 +713,13 @@ def compile(pattern, flags=0): stack.append([FunctionCallout(name)]) else: - raise error, 'unknown Python extension' + raise error, ('unknown Python extension: ' + \ + pattern[index]) elif pattern[index] == ':': # grouping, but no registers index = index + 1 - stack.append([('(', -1)]) + stack.append([OpenParen(-1)]) elif pattern[index] == '#': # comment diff --git a/Lib/test/output/test_re b/Lib/test/output/test_re index b87400f..b1907cc 100644 --- a/Lib/test/output/test_re +++ b/Lib/test/output/test_re @@ -40,7 +40,7 @@ test_re Traceback (innermost last): File "../Lib/test/test_re.py", line 19, in ? obj=re.compile(pattern) - File "../Lib/re.py", line 1078, in compile + File "../Lib/re.py", line 1099, in compile if pattern[index] != ']': IndexError: string index out of range ('a[', '-', 2) @@ -65,21 +65,7 @@ IndexError: string index out of range ('\\by\\b', 'yz', 1) ('\\by\\b', 'xyz', 1) ('ab|cd', 'abc', 0, 'found', 'ab') -*** Unexpected error *** -Traceback (innermost last): - File "../Lib/test/test_re.py", line 19, in ? - obj=re.compile(pattern) - File "../Lib/re.py", line 1097, in compile - if stack[-1][0].name == '(': -AttributeError: attribute-less object ('ab|cd', 'abcd', 0, 'found', 'ab') -*** Unexpected error *** -Traceback (innermost last): - File "../Lib/test/test_re.py", line 19, in ? - obj=re.compile(pattern) - File "../Lib/re.py", line 1097, in compile - if stack[-1][0].name == '(': -AttributeError: attribute-less object ('()ef', 'def', 0, 'found+"-"+g1', 'ef-') === Syntax error: ('()ef', 'def', 0, 'found+"-"+g1', 'ef-') ('$b', 'b', 1) @@ -91,54 +77,47 @@ AttributeError: attribute-less object ('a\\\\b', 'a\\b', 0, 'found', 'a\\b') === Failed incorrectly ('a\\\\b', 'a\\b', 0, 'found', 'a\\b') ('((a))', 'abc', 0, 'found+"-"+g1+"-"+g2', 'a-a-a') -=== grouping error ('((a))', 'abc', 0, 'found+"-"+g1+"-"+g2', 'a-a-a') 'a--' should be 'a-a-a' +=== grouping error ('((a))', 'abc', 0, 'found+"-"+g1+"-"+g2', 'a-a-a') 'a-None-None' should be 'a-a-a' ('(a)b(c)', 'abc', 0, 'found+"-"+g1+"-"+g2', 'abc-a-c') -=== grouping error ('(a)b(c)', 'abc', 0, 'found+"-"+g1+"-"+g2', 'abc-a-c') 'abc--' should be 'abc-a-c' +=== grouping error ('(a)b(c)', 'abc', 0, 'found+"-"+g1+"-"+g2', 'abc-a-c') 'abc-None-None' should be 'abc-a-c' ('a+b+c', 'aabbabc', 0, 'found', 'abc') ('(a+|b)*', 'ab', 0, 'found+"-"+g1', 'ab-b') *** Unexpected error *** Traceback (innermost last): File "../Lib/test/test_re.py", line 19, in ? obj=re.compile(pattern) - File "../Lib/re.py", line 745, in compile - while (len(stack) > 0) and (stack[-1][0].name != '('): -AttributeError: attribute-less object + File "../Lib/re.py", line 786, in compile + expr[i] = JumpOpcode(label) +NameError: JumpOpcode ('(a+|b)+', 'ab', 0, 'found+"-"+g1', 'ab-b') *** Unexpected error *** Traceback (innermost last): File "../Lib/test/test_re.py", line 19, in ? obj=re.compile(pattern) - File "../Lib/re.py", line 745, in compile - while (len(stack) > 0) and (stack[-1][0].name != '('): -AttributeError: attribute-less object + File "../Lib/re.py", line 786, in compile + expr[i] = JumpOpcode(label) +NameError: JumpOpcode ('(a+|b)?', 'ab', 0, 'found+"-"+g1', 'a-a') *** Unexpected error *** Traceback (innermost last): File "../Lib/test/test_re.py", line 19, in ? obj=re.compile(pattern) - File "../Lib/re.py", line 745, in compile - while (len(stack) > 0) and (stack[-1][0].name != '('): -AttributeError: attribute-less object + File "../Lib/re.py", line 786, in compile + expr[i] = JumpOpcode(label) +NameError: JumpOpcode (')(', '-', 2) ('[^ab]*', 'cde', 0, 'found', 'cde') ('abc', '', 1) ('a*', '', 0, 'found', '') ('a|b|c|d|e', 'e', 0, 'found', 'e') -*** Unexpected error *** -Traceback (innermost last): - File "../Lib/test/test_re.py", line 19, in ? - obj=re.compile(pattern) - File "../Lib/re.py", line 625, in compile - while (len(stack) != 0) and \ -AttributeError: attribute-less object ('(a|b|c|d|e)f', 'ef', 0, 'found+"-"+g1', 'ef-e') *** Unexpected error *** Traceback (innermost last): File "../Lib/test/test_re.py", line 19, in ? obj=re.compile(pattern) - File "../Lib/re.py", line 625, in compile - while (len(stack) != 0) and \ -AttributeError: attribute-less object + File "../Lib/re.py", line 786, in compile + expr[i] = JumpOpcode(label) +NameError: JumpOpcode ('abcd*efg', 'abcdefg', 0, 'found', 'abcdefg') ('ab*', 'xabyabbbz', 0, 'found', 'ab') ('ab*', 'xayabbbz', 0, 'found', 'a') @@ -147,50 +126,44 @@ AttributeError: attribute-less object Traceback (innermost last): File "../Lib/test/test_re.py", line 19, in ? obj=re.compile(pattern) - File "../Lib/re.py", line 745, in compile - while (len(stack) > 0) and (stack[-1][0].name != '('): -AttributeError: attribute-less object + File "../Lib/re.py", line 786, in compile + expr[i] = JumpOpcode(label) +NameError: JumpOpcode ('[abhgefdc]ij', 'hij', 0, 'found', 'hij') ('^(ab|cd)e', 'abcde', 1, 'xg1y', 'xy') *** Unexpected error *** Traceback (innermost last): File "../Lib/test/test_re.py", line 19, in ? obj=re.compile(pattern) - File "../Lib/re.py", line 745, in compile - while (len(stack) > 0) and (stack[-1][0].name != '('): -AttributeError: attribute-less object + File "../Lib/re.py", line 786, in compile + expr[i] = JumpOpcode(label) +NameError: JumpOpcode ('(abc|)ef', 'abcdef', 0, 'found+"-"+g1', 'ef-') -*** Unexpected error *** -Traceback (innermost last): - File "../Lib/test/test_re.py", line 19, in ? - obj=re.compile(pattern) - File "../Lib/re.py", line 745, in compile - while (len(stack) > 0) and (stack[-1][0].name != '('): -AttributeError: attribute-less object +=== Syntax error: ('(abc|)ef', 'abcdef', 0, 'found+"-"+g1', 'ef-') ('(a|b)c*d', 'abcd', 0, 'found+"-"+g1', 'bcd-b') *** Unexpected error *** Traceback (innermost last): File "../Lib/test/test_re.py", line 19, in ? obj=re.compile(pattern) - File "../Lib/re.py", line 745, in compile - while (len(stack) > 0) and (stack[-1][0].name != '('): -AttributeError: attribute-less object + File "../Lib/re.py", line 786, in compile + expr[i] = JumpOpcode(label) +NameError: JumpOpcode ('(ab|ab*)bc', 'abc', 0, 'found+"-"+g1', 'abc-a') *** Unexpected error *** Traceback (innermost last): File "../Lib/test/test_re.py", line 19, in ? obj=re.compile(pattern) - File "../Lib/re.py", line 745, in compile - while (len(stack) > 0) and (stack[-1][0].name != '('): -AttributeError: attribute-less object + File "../Lib/re.py", line 786, in compile + expr[i] = JumpOpcode(label) +NameError: JumpOpcode ('a([bc]*)c*', 'abc', 0, 'found+"-"+g1', 'abc-bc') -=== grouping error ('a([bc]*)c*', 'abc', 0, 'found+"-"+g1', 'abc-bc') 'abc-' should be 'abc-bc' +=== grouping error ('a([bc]*)c*', 'abc', 0, 'found+"-"+g1', 'abc-bc') 'abc-None' should be 'abc-bc' ('a([bc]*)(c*d)', 'abcd', 0, 'found+"-"+g1+"-"+g2', 'abcd-bc-d') -=== grouping error ('a([bc]*)(c*d)', 'abcd', 0, 'found+"-"+g1+"-"+g2', 'abcd-bc-d') 'abcd--' should be 'abcd-bc-d' +=== grouping error ('a([bc]*)(c*d)', 'abcd', 0, 'found+"-"+g1+"-"+g2', 'abcd-bc-d') 'abcd-None-None' should be 'abcd-bc-d' ('a([bc]+)(c*d)', 'abcd', 0, 'found+"-"+g1+"-"+g2', 'abcd-bc-d') -=== grouping error ('a([bc]+)(c*d)', 'abcd', 0, 'found+"-"+g1+"-"+g2', 'abcd-bc-d') 'abcd--' should be 'abcd-bc-d' +=== grouping error ('a([bc]+)(c*d)', 'abcd', 0, 'found+"-"+g1+"-"+g2', 'abcd-bc-d') 'abcd-None-None' should be 'abcd-bc-d' ('a([bc]*)(c+d)', 'abcd', 0, 'found+"-"+g1+"-"+g2', 'abcd-b-cd') -=== grouping error ('a([bc]*)(c+d)', 'abcd', 0, 'found+"-"+g1+"-"+g2', 'abcd-b-cd') 'abcd--' should be 'abcd-b-cd' +=== grouping error ('a([bc]*)(c+d)', 'abcd', 0, 'found+"-"+g1+"-"+g2', 'abcd-b-cd') 'abcd-None-None' should be 'abcd-b-cd' ('a[bcd]*dcdcde', 'adcdcde', 0, 'found', 'adcdcde') ('a[bcd]+dcdcde', 'adcdcde', 1) ('(ab|a)b*c', 'abc', 0, 'found+"-"+g1', 'abc-ab') @@ -198,142 +171,129 @@ AttributeError: attribute-less object Traceback (innermost last): File "../Lib/test/test_re.py", line 19, in ? obj=re.compile(pattern) - File "../Lib/re.py", line 745, in compile - while (len(stack) > 0) and (stack[-1][0].name != '('): -AttributeError: attribute-less object + File "../Lib/re.py", line 786, in compile + expr[i] = JumpOpcode(label) +NameError: JumpOpcode ('((a)(b)c)(d)', 'abcd', 0, 'g1+"-"+g2+"-"+g3+"-"+g4', 'abc-a-b-d') -=== grouping error ('((a)(b)c)(d)', 'abcd', 0, 'g1+"-"+g2+"-"+g3+"-"+g4', 'abc-a-b-d') '---' should be 'abc-a-b-d' +=== grouping error ('((a)(b)c)(d)', 'abcd', 0, 'g1+"-"+g2+"-"+g3+"-"+g4', 'abc-a-b-d') 'None-None-None-None' should be 'abc-a-b-d' ('[a-zA-Z_][a-zA-Z0-9_]*', 'alpha', 0, 'found', 'alpha') ('^a(bc+|b[eh])g|.h$', 'abh', 0, 'found+"-"+g1', 'bh-None') *** Unexpected error *** Traceback (innermost last): File "../Lib/test/test_re.py", line 19, in ? obj=re.compile(pattern) - File "../Lib/re.py", line 745, in compile - while (len(stack) > 0) and (stack[-1][0].name != '('): -AttributeError: attribute-less object + File "../Lib/re.py", line 786, in compile + expr[i] = JumpOpcode(label) +NameError: JumpOpcode ('(bc+d$|ef*g.|h?i(j|k))', 'effgz', 0, 'found+"-"+g1+"-"+g2', 'effgz-effgz-None') *** Unexpected error *** Traceback (innermost last): File "../Lib/test/test_re.py", line 19, in ? obj=re.compile(pattern) - File "../Lib/re.py", line 625, in compile - while (len(stack) != 0) and \ -AttributeError: attribute-less object + File "../Lib/re.py", line 786, in compile + expr[i] = JumpOpcode(label) +NameError: JumpOpcode ('(bc+d$|ef*g.|h?i(j|k))', 'ij', 0, 'found+"-"+g1+"-"+g2', 'ij-ij-j') *** Unexpected error *** Traceback (innermost last): File "../Lib/test/test_re.py", line 19, in ? obj=re.compile(pattern) - File "../Lib/re.py", line 625, in compile - while (len(stack) != 0) and \ -AttributeError: attribute-less object + File "../Lib/re.py", line 786, in compile + expr[i] = JumpOpcode(label) +NameError: JumpOpcode ('(bc+d$|ef*g.|h?i(j|k))', 'effg', 1) *** Unexpected error *** Traceback (innermost last): File "../Lib/test/test_re.py", line 19, in ? obj=re.compile(pattern) - File "../Lib/re.py", line 625, in compile - while (len(stack) != 0) and \ -AttributeError: attribute-less object + File "../Lib/re.py", line 786, in compile + expr[i] = JumpOpcode(label) +NameError: JumpOpcode ('(bc+d$|ef*g.|h?i(j|k))', 'bcdd', 1) *** Unexpected error *** Traceback (innermost last): File "../Lib/test/test_re.py", line 19, in ? obj=re.compile(pattern) - File "../Lib/re.py", line 625, in compile - while (len(stack) != 0) and \ -AttributeError: attribute-less object + File "../Lib/re.py", line 786, in compile + expr[i] = JumpOpcode(label) +NameError: JumpOpcode ('(bc+d$|ef*g.|h?i(j|k))', 'reffgz', 0, 'found+"-"+g1+"-"+g2', 'effgz-effgz-None') *** Unexpected error *** Traceback (innermost last): File "../Lib/test/test_re.py", line 19, in ? obj=re.compile(pattern) - File "../Lib/re.py", line 625, in compile - while (len(stack) != 0) and \ -AttributeError: attribute-less object + File "../Lib/re.py", line 786, in compile + expr[i] = JumpOpcode(label) +NameError: JumpOpcode ('(((((((((a)))))))))', 'a', 0, 'found', 'a') ('multiple words of text', 'uh-uh', 1) ('multiple words', 'multiple words, yeah', 0, 'found', 'multiple words') === Failed incorrectly ('multiple words', 'multiple words, yeah', 0, 'found', 'multiple words') ('(.*)c(.*)', 'abcde', 0, 'found+"-"+g1+"-"+g2', 'abcde-ab-de') -=== grouping error ('(.*)c(.*)', 'abcde', 0, 'found+"-"+g1+"-"+g2', 'abcde-ab-de') 'abcde--' should be 'abcde-ab-de' +=== grouping error ('(.*)c(.*)', 'abcde', 0, 'found+"-"+g1+"-"+g2', 'abcde-ab-de') 'abcde-None-None' should be 'abcde-ab-de' ('((.*), (.*))', '(a, b)', 0, 'g2+"-"+g1', 'b-a') -=== grouping error ('((.*), (.*))', '(a, b)', 0, 'g2+"-"+g1', 'b-a') '-' should be 'b-a' +=== grouping error ('((.*), (.*))', '(a, b)', 0, 'g2+"-"+g1', 'b-a') 'None-None' should be 'b-a' ('[k]', 'ab', 1) ('a[-]?c', 'ac', 0, 'found', 'ac') ('(abc)\\1', 'abcabc', 0, 'g1', 'abc') -=== grouping error ('(abc)\\1', 'abcabc', 0, 'g1', 'abc') '' should be 'abc' +=== grouping error ('(abc)\\1', 'abcabc', 0, 'g1', 'abc') 'None' should be 'abc' ('([a-c]*)\\1', 'abcabc', 0, 'g1', 'abc') -=== grouping error ('([a-c]*)\\1', 'abcabc', 0, 'g1', 'abc') '' should be 'abc' +=== grouping error ('([a-c]*)\\1', 'abcabc', 0, 'g1', 'abc') 'None' should be 'abc' ('^(.+)?B', 'AB', 0, 'g1', 'A') -=== grouping error ('^(.+)?B', 'AB', 0, 'g1', 'A') '' should be 'A' +=== grouping error ('^(.+)?B', 'AB', 0, 'g1', 'A') 'None' should be 'A' ('(a+).\\1$', 'aaaaa', 0, 'found+"-"+g1', 'aaaaa-aa') -=== grouping error ('(a+).\\1$', 'aaaaa', 0, 'found+"-"+g1', 'aaaaa-aa') 'aaaaa-' should be 'aaaaa-aa' +=== grouping error ('(a+).\\1$', 'aaaaa', 0, 'found+"-"+g1', 'aaaaa-aa') 'aaaaa-None' should be 'aaaaa-aa' ('^(a+).\\1$', 'aaaa', 1) ('(abc)\\1', 'abcabc', 0, 'found+"-"+g1', 'abcabc-abc') -=== grouping error ('(abc)\\1', 'abcabc', 0, 'found+"-"+g1', 'abcabc-abc') 'abcabc-' should be 'abcabc-abc' +=== grouping error ('(abc)\\1', 'abcabc', 0, 'found+"-"+g1', 'abcabc-abc') 'abcabc-None' should be 'abcabc-abc' ('([a-c]+)\\1', 'abcabc', 0, 'found+"-"+g1', 'abcabc-abc') -=== grouping error ('([a-c]+)\\1', 'abcabc', 0, 'found+"-"+g1', 'abcabc-abc') 'abcabc-' should be 'abcabc-abc' +=== grouping error ('([a-c]+)\\1', 'abcabc', 0, 'found+"-"+g1', 'abcabc-abc') 'abcabc-None' should be 'abcabc-abc' ('(a)\\1', 'aa', 0, 'found+"-"+g1', 'aa-a') -=== grouping error ('(a)\\1', 'aa', 0, 'found+"-"+g1', 'aa-a') 'aa-' should be 'aa-a' +=== grouping error ('(a)\\1', 'aa', 0, 'found+"-"+g1', 'aa-a') 'aa-None' should be 'aa-a' ('(a+)\\1', 'aa', 0, 'found+"-"+g1', 'aa-a') -=== grouping error ('(a+)\\1', 'aa', 0, 'found+"-"+g1', 'aa-a') 'aa-' should be 'aa-a' +=== grouping error ('(a+)\\1', 'aa', 0, 'found+"-"+g1', 'aa-a') 'aa-None' should be 'aa-a' ('(a+)+\\1', 'aa', 0, 'found+"-"+g1', 'aa-a') -=== grouping error ('(a+)+\\1', 'aa', 0, 'found+"-"+g1', 'aa-a') 'aa-' should be 'aa-a' +=== grouping error ('(a+)+\\1', 'aa', 0, 'found+"-"+g1', 'aa-a') 'aa-None' should be 'aa-a' ('(a).+\\1', 'aba', 0, 'found+"-"+g1', 'aba-a') -=== grouping error ('(a).+\\1', 'aba', 0, 'found+"-"+g1', 'aba-a') 'aba-' should be 'aba-a' +=== grouping error ('(a).+\\1', 'aba', 0, 'found+"-"+g1', 'aba-a') 'aba-None' should be 'aba-a' ('(a)ba*\\1', 'aba', 0, 'found+"-"+g1', 'aba-a') -=== grouping error ('(a)ba*\\1', 'aba', 0, 'found+"-"+g1', 'aba-a') 'aba-' should be 'aba-a' +=== grouping error ('(a)ba*\\1', 'aba', 0, 'found+"-"+g1', 'aba-a') 'aba-None' should be 'aba-a' ('(aa|a)a\\1$', 'aaa', 0, 'found+"-"+g1', 'aaa-a') *** Unexpected error *** Traceback (innermost last): File "../Lib/test/test_re.py", line 19, in ? obj=re.compile(pattern) - File "../Lib/re.py", line 745, in compile - while (len(stack) > 0) and (stack[-1][0].name != '('): -AttributeError: attribute-less object + File "../Lib/re.py", line 786, in compile + expr[i] = JumpOpcode(label) +NameError: JumpOpcode ('(a|aa)a\\1$', 'aaa', 0, 'found+"-"+g1', 'aaa-a') *** Unexpected error *** Traceback (innermost last): File "../Lib/test/test_re.py", line 19, in ? obj=re.compile(pattern) - File "../Lib/re.py", line 745, in compile - while (len(stack) > 0) and (stack[-1][0].name != '('): -AttributeError: attribute-less object + File "../Lib/re.py", line 786, in compile + expr[i] = JumpOpcode(label) +NameError: JumpOpcode ('(a+)a\\1$', 'aaa', 0, 'found+"-"+g1', 'aaa-a') -=== grouping error ('(a+)a\\1$', 'aaa', 0, 'found+"-"+g1', 'aaa-a') 'aaa-' should be 'aaa-a' +=== grouping error ('(a+)a\\1$', 'aaa', 0, 'found+"-"+g1', 'aaa-a') 'aaa-None' should be 'aaa-a' ('([abc]*)\\1', 'abcabc', 0, 'found+"-"+g1', 'abcabc-abc') -=== grouping error ('([abc]*)\\1', 'abcabc', 0, 'found+"-"+g1', 'abcabc-abc') 'abcabc-' should be 'abcabc-abc' +=== grouping error ('([abc]*)\\1', 'abcabc', 0, 'found+"-"+g1', 'abcabc-abc') 'abcabc-None' should be 'abcabc-abc' ('(a)(b)c|ab', 'ab', 0, 'found+"-"+g1+"-"+g2', 'ab-None-None') -*** Unexpected error *** -Traceback (innermost last): - File "../Lib/test/test_re.py", line 19, in ? - obj=re.compile(pattern) - File "../Lib/re.py", line 1097, in compile - if stack[-1][0].name == '(': -AttributeError: attribute-less object ('(a)+x', 'aaax', 0, 'found+"-"+g1', 'aaax-a') -=== grouping error ('(a)+x', 'aaax', 0, 'found+"-"+g1', 'aaax-a') 'aaax-' should be 'aaax-a' +=== grouping error ('(a)+x', 'aaax', 0, 'found+"-"+g1', 'aaax-a') 'aaax-None' should be 'aaax-a' ('([ac])+x', 'aacx', 0, 'found+"-"+g1', 'aacx-c') -=== grouping error ('([ac])+x', 'aacx', 0, 'found+"-"+g1', 'aacx-c') 'aacx-' should be 'aacx-c' +=== grouping error ('([ac])+x', 'aacx', 0, 'found+"-"+g1', 'aacx-c') 'aacx-None' should be 'aacx-c' ('([^/]*/)*sub1/', 'd:msgs/tdir/sub1/trial/away.cpp', 0, 'found+"-"+g1', 'd:msgs/tdir/sub1/-tdir/') -=== grouping error ('([^/]*/)*sub1/', 'd:msgs/tdir/sub1/trial/away.cpp', 0, 'found+"-"+g1', 'd:msgs/tdir/sub1/-tdir/') 'd:msgs/tdir/sub1/-' should be 'd:msgs/tdir/sub1/-tdir/' +=== grouping error ('([^/]*/)*sub1/', 'd:msgs/tdir/sub1/trial/away.cpp', 0, 'found+"-"+g1', 'd:msgs/tdir/sub1/-tdir/') 'd:msgs/tdir/sub1/-None' should be 'd:msgs/tdir/sub1/-tdir/' ('([^.]*)\\.([^:]*):[T ]+(.*)', 'track1.title:TBlah blah blah', 0, 'found+"-"+g1+"-"+g2+"-"+g3', 'track1.title:TBlah blah blah-track1-title-Blah blah blah') === Failed incorrectly ('([^.]*)\\.([^:]*):[T ]+(.*)', 'track1.title:TBlah blah blah', 0, 'found+"-"+g1+"-"+g2+"-"+g3', 'track1.title:TBlah blah blah-track1-title-Blah blah blah') ('([^N]*N)+', 'abNNxyzN', 0, 'found+"-"+g1', 'abNNxyzN-xyzN') -=== grouping error ('([^N]*N)+', 'abNNxyzN', 0, 'found+"-"+g1', 'abNNxyzN-xyzN') 'abNNxyzN-' should be 'abNNxyzN-xyzN' +=== grouping error ('([^N]*N)+', 'abNNxyzN', 0, 'found+"-"+g1', 'abNNxyzN-xyzN') 'abNNxyzN-None' should be 'abNNxyzN-xyzN' ('([^N]*N)+', 'abNNxyz', 0, 'found+"-"+g1', 'abNN-N') -=== grouping error ('([^N]*N)+', 'abNNxyz', 0, 'found+"-"+g1', 'abNN-N') 'abNN-' should be 'abNN-N' +=== grouping error ('([^N]*N)+', 'abNNxyz', 0, 'found+"-"+g1', 'abNN-N') 'abNN-None' should be 'abNN-N' ('([abc]*)x', 'abcx', 0, 'found+"-"+g1', 'abcx-abc') -=== grouping error ('([abc]*)x', 'abcx', 0, 'found+"-"+g1', 'abcx-abc') 'abcx-' should be 'abcx-abc' +=== grouping error ('([abc]*)x', 'abcx', 0, 'found+"-"+g1', 'abcx-abc') 'abcx-None' should be 'abcx-abc' ('([abc]*)x', 'abc', 1) ('([xyz]*)x', 'abcx', 0, 'found+"-"+g1', 'x-') +=== grouping error ('([xyz]*)x', 'abcx', 0, 'found+"-"+g1', 'x-') 'x-None' should be 'x-' ('(a)+b|aac', 'aac', 0, 'found+"-"+g1', 'aac-None') -*** Unexpected error *** -Traceback (innermost last): - File "../Lib/test/test_re.py", line 19, in ? - obj=re.compile(pattern) - File "../Lib/re.py", line 1097, in compile - if stack[-1][0].name == '(': -AttributeError: attribute-less object |