Python 正则表达式的踩的一个坑

118 阅读1分钟

最近做一个用 pyhton 替换文本中特定词的需求
要求将特定单词(单词前后没字母)替换成一串等长的星号 *,不区分大小写
因为 re 支持的正则语法不是标准语法
通过在线正则工具生成的表达式直接用很容易出错

# sensitive = {'Q': '*', 'ww': '**', 'EEE': '***', 'RRRR': '****'}

def doFilter(data, sensitive):
    for key, value in sensitive.items():
        res = r'(?i)(^|(?<=[^a-zA-Z]))' + key + r'($|(?=[^a-zA-Z]))'
        pattern = re.compile(res)
        data = re.sub(pattern, value, data)
    return data

一劳永逸的办法是使用第三方工具 regex 替换 re

# sensitive = {'Q': '*', 'ww': '**', 'EEE': '***', 'RRRR': '****'}

def doFilter(data, sensitive):
    for key, value in sensitive.items():
        res = r'(?i)(^|(?<=[^a-zA-Z]))' + key + r'($|(?=[^a-zA-Z]))'
        pattern = regex.compile(res)
        data = regex.sub(pattern, value, data)
    return data