用re.IGNORECASE替换多个子字符串

时间:2019-07-11 05:53:19

标签: python regex python-3.x dictionary

我想用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 :(得分:0)

添加re.IGNORECASE并尝试

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

因为当匹配被说成“ fOo”时,替代项[match.group()]找不到相关的值