将字典优先级中的文本替换为更长的字符串

时间:2016-02-21 17:17:15

标签: python regex dictionary

我正在尝试编写一个程序来使用字典替换文件中的文本。

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

我想在获取子串之前先替换较长的字符串。在大多数情况下,上面的代码片段似乎可以完成这项工作。例如,

preprocessing_dict = { 'ka': 'k', 'ka+i': '<k*' }

ka+i的任何实例都被<k*替换而不是k+i

但是在较长版本的字典中(206键:从文本文件中读取的值对),'na': 'n', 'na+i': '<n*' na+i的任何实例都被n+i替换。但是ka+i仍然有效。

我希望你能指出我正确的方向。谢谢。

1 个答案:

答案 0 :(得分:3)

您需要先按排序顺序拉出按键。

keys = sorted(preprocessing_dict.keys(), key=len, reverse=True)