Python regex susbstitution函数来评估文字字符

时间:2015-07-02 20:21:52

标签: python regex

我正在开发一个应用程序,我需要在文本正文中搜索和替换字符串。

我遇到this SO post并且一直使用第3个答案作为我的功能的基础。

我的代码如下:

subs_dict = {
    "INT.": "Internet",
    ...
}

def substitutions(self, text):
    return re.sub(
        r'\b' + '|'.join(subs_dict.keys())
        + r'\b', lambda m: subs_dict[m.group(0)],
        text
    )

但是,"The INTREPID explorer"这样的文字会因为Key Error的{​​{1}}失败而被绊倒。

问题在于比较“INT”。被解释为“INT”,任何其他字符作为句点是特殊的。

我已使用此修改后的代码暂时解决了该问题:

INTR

允许对字段进行句子评估但保持字典键的完整性(而不是使用“INT [。]”作为将失败的键。

然而,这有一个难闻的气味,当然只关注期间,而不是任何其他特殊字符。

所以,我想我的问题是,如果有一种更好的方法可以起作用并从字面上评估任何特殊字符。

1 个答案:

答案 0 :(得分:2)

更简洁的方法是在加入re.escape之前使用{{3}}来转义实际字符串,就像这样

r'\b' + '|'.join(map(re.escape, subs_dict)) + r'\b'

例如,

>>> import re
>>> subs_dict = {"INT.": "Internet"}
>>> def substitutions(text):
...     return re.sub(r'\b' + '|'.join(map(re.escape, subs_dict)) + r'\b',
...                   lambda m: subs_dict[m.group(0)], text)
... 
>>> substitutions("The INTREPID explorer")
'The INTREPID explorer'
>>> substitutions("The INT.EPID explorer")
'The InternetEPID explorer'