How about: pattern = re.compile('^([^a]|(a+[^ab]))*aaab') Which basically says, "precede with arbitrarily many non-a's or a sequences ending in non-b, then must have 3 as followed by a b."
cases = ["xyz123aaabbab", "xayz123aaabab", "xaaayz123aaabab", "xyz123aaaababaaabab", "xyz123aabbaaab", "xaaayz123abab"] [re.search(pattern, case) is not None for case in cases] [True, True, True, False, False, False] --Scott David Daniels [EMAIL PROTECTED] -- http://mail.python.org/mailman/listinfo/python-list