def test_search_star_plus(self): assert re.search('x*', 'axx').span(0) == (0, 0) assert re.search('x*', 'axx').span() == (0, 0) assert re.search('x+', 'axx').span(0) == (1, 3) assert re.search('x+', 'axx').span() == (1, 3) assert re.search('x', 'aaa') == None assert re.match('a*', 'xxx').span(0) == (0, 0) assert re.match('a*', 'xxx').span() == (0, 0) assert re.match('x*', 'xxxa').span(0) == (0, 3) assert re.match('x*', 'xxxa').span() == (0, 3) assert re.match('a+', 'xxx') == None
def test_bug_418626(self): # bugs 418626 at al. -- Testing Greg Chapman's addition of op code # SRE_OP_MIN_REPEAT_ONE for eliminating recursion on simple uses of # pattern '*?' on a long string. assert re.match('.*?c', 10000*'ab'+'cd').end(0) == 20001 assert re.match('.*?cd', 5000*'ab'+'c'+5000*'ab'+'cde').end(0) == ( 20003) assert re.match('.*?cd', 20000*'abc'+'de').end(0) == 60001 # non-simple '*?' still used to hit the recursion limit, before the # non-recursive scheme was implemented. assert re.search('(a|b)*?c', 10000*'ab'+'cd').end(0) == 20001
def test_bug_418626(self): # bugs 418626 at al. -- Testing Greg Chapman's addition of op code # SRE_OP_MIN_REPEAT_ONE for eliminating recursion on simple uses of # pattern '*?' on a long string. assert re.match('.*?c', 10000 * 'ab' + 'cd').end(0) == 20001 assert re.match('.*?cd', 5000 * 'ab' + 'c' + 5000 * 'ab' + 'cde').end(0) == (20003) assert re.match('.*?cd', 20000 * 'abc' + 'de').end(0) == 60001 # non-simple '*?' still used to hit the recursion limit, before the # non-recursive scheme was implemented. assert re.search('(a|b)*?c', 10000 * 'ab' + 'cd').end(0) == 20001
def test_search_coverage(self): assert re.search("\s(b)", " b").group(1) == "b" assert re.search("a\s", "a ").group(0) == "a "
def test_not_literal(self): assert re.search("\s([^a])", " b").group(1) == "b" assert re.search("\s([^a]*)", " bb").group(1) == "bb"
def test_special_escapes(self): assert re.search(r"\b(b.)\b", "abcd abc bcd bx").group(1) == "bx" assert re.search(r"\B(b.)\B", "abc bcd bc abxd").group(1) == "bx" assert re.search(r"\b(b.)\b", "abcd abc bcd bx", re.LOCALE).group(1) == "bx" assert re.search(r"\B(b.)\B", "abc bcd bc abxd", re.LOCALE).group(1) == "bx" assert re.search(r"\b(b.)\b", "abcd abc bcd bx", re.UNICODE).group(1) == "bx" assert re.search(r"\B(b.)\B", "abc bcd bc abxd", re.UNICODE).group(1) == "bx" assert re.search(r"^abc$", "\nabc\n", re.M).group(0) == "abc" assert re.search(r"^\Aabc\Z$", "abc", re.M).group(0) == "abc" assert re.search(r"^\Aabc\Z$", "\nabc\n", re.M) == None assert re.search(r"\b(b.)\b", u"abcd abc bcd bx").group(1) == "bx" assert re.search(r"\B(b.)\B", u"abc bcd bc abxd").group(1) == "bx" assert re.search(r"^abc$", u"\nabc\n", re.M).group(0) == "abc" assert re.search(r"^\Aabc\Z$", u"abc", re.M).group(0) == "abc" assert re.search(r"^\Aabc\Z$", u"\nabc\n", re.M) == None assert re.search(r"\d\D\w\W\s\S", "1aa! a").group(0) == "1aa! a" assert re.search(r"\d\D\w\W\s\S", "1aa! a", re.LOCALE).group(0) == "1aa! a" assert re.search(r"\d\D\w\W\s\S", "1aa! a", re.UNICODE).group(0) == "1aa! a"