Look behind
We could safely define look behind as the opposite operation to look ahead. It tries to match behind the subexpression passed as an argument. It has a zero-width nature as well, and therefore, it won't be part of the result.
It is represented as an expression preceded by a question mark, a less-than sign, and an equals sign, ?<=
, inside a parenthesis block: (?<=regex)
.
We could, for instance, use it in an example similar to the one we used in negative look ahead to find just the surname of someone named John McLane
. To accomplish this, we could write a look behind like the following:
>>>pattern = re.compile(r'(?<=John\s)McLane')
>>>result = pattern.finditer("I would rather go out with John McLane than with John Smith or John Bon Jovi")
>>>for i in result:
... print i.start(), i.end()
...
32 38
With the preceding look behind, we requested the regex engine to match only positions that are preceded with John
and a whitespace to then consume McLane...