Я хочу заменить слова в своем документе на словарь Python, и я хочу реализовать замены без учета регистра.
Как у нас есть строка:
string = 'spam fOo bar foo bar spam fOO'
и словарь:
substitutions = {"foo": "TEST", "bar": "BAR"}
в результате я хочу получить:
'spam TEST bar TEST bar spam TEST'
т.е. все слова "foo" заменяются независимо от заглавных или строчных букв.
Для этого я нашел следующую функцию:
def replace(string, substitutions):
regex = re.compile('|'.join(map(re.escape, substitutions)))
return regex.sub(lambda match: substitutions[match.group(0)], string)
возвращает меня:
'TEST spam fOo BAR TEST BAR spam fOO'
т.е. только точное совпадение было заменено. Если я добавлю re.IGNORECASE в качестве флага для re.compile () - ничего не изменится.