Замена нескольких подстрок на re.IGNORECASE - PullRequest
0 голосов
/ 11 июля 2019

Я хочу заменить слова в своем документе на словарь 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 () - ничего не изменится.

1 Ответ

0 голосов
/ 11 июля 2019

Добавьте re.IGNORECASE и попробуйте

  ... substitutions[match.group().lower()] ...

, поскольку подстановки [match.group ()] не находят релевантное значение, когда в совпадении говорится "fOo"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...