Python Regular Expressions: Lookahead and lookbehind examples

Last updated:
Table of Contents

Unless otherwise stated, examples use Python 3+.

For all the other use cases for regular expressions in Python, see Python Regular Expressions: Examples & Reference

Lookbehind

TEMPLATE: (?<=PATTERN)

Match pattern if it is immediately preceded by something.

Example pattern: "bar" only if it's preceded by "foo"

import re

# replace "bar" with "BAR" if it IS preceded by "foo"
pattern = "(?<=foo)bar"
replacement = "BAR"

string = "foo bar foobar"

re.sub(pattern,replacement,string)
# 'foo bar fooBAR'

Negative lookbehind

TEMPLATE: (?<!PATTERN)

Match pattern if it is not immediately preceded by something.

Example pattern: "bar" if it's NOT preceded by "foo"

import re

# replace "bar" with BAR if it is NOT preceded by "foo"
pattern = "(?<!foo)bar"
replacement = "BAR"
string = "foo bar foobar"

re.sub(pattern, replacement, string)
# 'foo BAR foobar'

Lookahead

TEMPLATE: (?=PATTERN)

Match pattern if it is immediately followed by something else.

Example pattern: "foo" only if it's followed by "bar"

import re

# replace "foo" only if it IS followed by "bar"
pattern = "foo(?=bar)"
replacement = "FOO"
string = "foo bar foobar"

re.sub(pattern,replacement,string)
# 'foo bar fooBAR'

Negative Lookahead

TEMPLATE: (?!PATTERN)

Match pattern if it is not immediately followed by something else.

Example pattern: "foo" only if it's NOT followed by "bar"

import re

# replace "foo" only if it is NOT followed by "bar"
pattern = "foo(?!bar)"
replacement = "FOO"
string = "foo bar foobar"

re.sub(pattern,replacement,string)
# 'FOO bar foobar'

Dialogue & Discussion