import re
profanity_list = ['foo', 'bar']
whitelist = ["BAR", "foo good"]
pattern_profanity = re.compile(
r'\b(?!(?:{})\b)(?i:{})\b'.format('|'.join(whitelist),'|'.join(profanity_list))) # same as r'\b{foo|bar}\b'
s = 'foo BAR foo good Bar'
censor_char = '*'
print(pattern_profanity.pattern)
print( re.sub(pattern_profanity, lambda m: censor_char*len(m.group(0)), s) )
#https://r...content-available-to-author-only...1.com/r/fPFqoM/1
aW1wb3J0IHJlCnByb2Zhbml0eV9saXN0ID0gWydmb28nLCAnYmFyJ10Kd2hpdGVsaXN0ID0gWyJCQVIiLCAiZm9vIGdvb2QiXQpwYXR0ZXJuX3Byb2Zhbml0eSA9IHJlLmNvbXBpbGUoCiAgcidcYig/ISg/Ont9KVxiKSg/aTp7fSlcYicuZm9ybWF0KCd8Jy5qb2luKHdoaXRlbGlzdCksJ3wnLmpvaW4ocHJvZmFuaXR5X2xpc3QpKSkgICMgc2FtZSBhcyByJ1xie2Zvb3xiYXJ9XGInCnMgPSAnZm9vIEJBUiBmb28gZ29vZCBCYXInCmNlbnNvcl9jaGFyID0gJyonCnByaW50KHBhdHRlcm5fcHJvZmFuaXR5LnBhdHRlcm4pCnByaW50KCByZS5zdWIocGF0dGVybl9wcm9mYW5pdHksIGxhbWJkYSBtOiBjZW5zb3JfY2hhcipsZW4obS5ncm91cCgwKSksIHMpICkKI2h0dHBzOi8vci4uLmNvbnRlbnQtYXZhaWxhYmxlLXRvLWF1dGhvci1vbmx5Li4uMS5jb20vci9mUEZxb00vMQ==