多重替换尊重资本化和标点符号

时间:2015-08-13 23:24:23

标签: python html regex

我正在尝试创建一个脚本,用<strong>标记替换正文中的关键字。 <strong>keyword</strong>

问题是单词可以大写或者像dog's toy那样标点符号(而我的目标是狗,强标记会切断's

我正在尝试创建一个按照描述工作的高效动态替换器。

到目前为止,这就是我所拥有的:

def strongwords(text, dict):
    rc = re.compile('|'.join(map(re.escape, dict)))
    def translate(match):
        return dict[match.group(0)]
    return rc.sub(translate, text)

除非我尽可能地创建一个巨大的dict(如上所述)并且在查找/替换上花费资源,否则我认为这不能正常工作。

使用经过验证的正则表达式配方是否有pythonic方法可以做到这一点?也许是为此设计了一个包或模块?

1 个答案:

答案 0 :(得分:1)

可以使用re.IGNORECASE标志解决案例的第一个问题。第二个有点复杂,但可选的匹配组可以工作。

rc = re.compile("(%s)('s|re)?" % ('|'.join(map(re.escape, dict)), re.IGNORECASE)

该模式将忽略大小写并允许任何关键字以's或're为后缀(根据需要添加更多)。可选匹配组需要通过关键字匹配加回,但这应该很容易