import re
regex = re.compile(r"\bFOO\b(?![^[\]]*(?:\[\[[^[\]]*]][^[\]\n]*)*]])", flags=re.MULTILINE)
test_str = ("Should match the following\n"
"lorem ipsum FOO dolor\n"
"lorem ipsum FOO dolor [[amet]]\n"
"[[lorem]] ipsum FOO dolor [[sit]] amet\n\n"
"Should NOT match the following\n"
"lorem ipsum [[FOO]] dolor\n"
"lorem [[ipsum FOO dolor]] sit amet\n"
"lorem [[ipsumFOOsolor]] sit amet\n"
"[[lorem]]\n"
"[[ipsum-FOO&dolor-sit.pdf#page=130]]\n"
"lorem ipsumFOOsolor sit amet\n\n"
"FOO should be matched below but is not because the double-brackets are not balanced.\n"
"lorem FOO [[ipsumFOOsolor]] sit ]] amet")
subst = "BAZ"
result = regex.sub(subst, test_str)
if result:
print(result)
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Python, please visit: https://docs.python.org/3/library/re.html